⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 new.mprof.1

📁 早期freebsd实现
💻 1
字号:
.\" Copyright (c) 1990 Regents of the University of California..\" All rights reserved..\".\" %sccs.include.redist.man%.\".\"     %W% (Berkeley) %G%.\".Dd %Q%.Dt mprof 1.Sh NAME.Nm mprof.Nd display dynamic memory allocation data.Sh SYNTAX.Nm mprof.Op options.Op Ar a.out Op Ar mprof.data.Pp.Ft void.Fn set_mprof_autosave "int count".Pp.Ft void.Fn mprof_stop.Pp.Ft void.Fn mprof_restart "char *filename".Sh DESCRIPTIONThe.Nm mprofcommand produces four tables that summarize the memory allocationbehavior of C programs, similar in style to the.Xr gprof 1command.  The arguments to  .Nm mprofare the executable image.Pf ( Xr a.out 5default)and the profile data file.Pf ( Ar mprof.datadefault).  The.Ar mprof.datafile is generated by linking a special version .Xr malloc 3into the executing image. This new version, found in the library.Pa libc_mp.amust be linked in at the end of the command that creates theexecutable image.  For example:.Pp.Dl Icc -g -o test main.o sub1.o sub2.o libc_mp.a.De.PpUsers' programs can contain additional calls to customize the userinterface to.Nm mprof .The function.Fn set_mprof_autosaveallows users to save the profile data periodically.  The.Fa countparameter specifies to save after that number of allocations.A value of 10,000 or 100,000 is typical for the.Fa countparameter for long running programs.  A value of 0 (the default)causes the the profile data to be written only when the program exits.The function.Fn mprof_stopcauses memory profiling to be discontinued and the profile data to bewritten to the output file.The function.Fn mprof_restartrestarts profiling.  The.Ar filenameparameter to.Fn mprof_restartspecifies the name of the file to write the profile data to..PpThe output of.Nm mprofconsists of four tables, the fields of which are described in detailbelow.  The first table breaks down the memory allocation of theprogram by the number of bytes requested.  For each byte size thenumber of allocations and frees is listed along with the programstructure types that correspond to that byte size..PpThe second table lists partial call chains over which memory wasallocated and never freed (call chains resulting in memory leaks).The table shows how much memory was allocated by each chain and howmuch each chain contributed to the total memory leakage..PpThe third table lists the functions in whichallocation occurred directly (i.e., called.Xr malloc ) ,indicates how much memory was allocated, shows how much of that wasnot later freed, breaks down allocation roughly by size, and shows howmany times each function was called..PpThe fourth table contains thesubgraph of the program's dynamic call graph in which allocationoccurred.  This table allows programmers to identify what functionswere indirectly responsible for memory allocation..PpThe following options are available:.Tw Ds.Tl Fl verboseEvery bin in which memory was allocated is printed; the call chain forevery memory leak is shown..Tl Fl normalOnly bins that contributed a reasonable fraction to the totalallocation are printed; call chains for leaks contributing more than0.5% to the total are shown.  This is the default verbosity setting..Tl Fl terseOnly bins that contributed a significant fraction to the totalallocation are printed.  Call chains contributing more than 1% to thetotal leakage are shown..Tl Fl leaktablePrint out the memory leak table without printing out call site offsets.This is the default..Tl Fl noleaktableDo not print out the memory leak table..Tl Fl offsetsPrint out the memory leak table and distinguish different call siteswithin a function by indicating the offset in the function as part ofthe path.  This is useful to identify a particular call site in afunction with many call sites that allocate memory..Tl.Sh FIELDS IN THE OUTPUTOften in the tables, percentages are presented in two column fields.In such a field, a blankindicates 0%, a dot indicates less than 1%, and two starsindicate 100%..PpWhen data is broken down by size categories, the categories mean thefollowing:.Df I.Cw x_=_extra_largexxx.Css = small      		x <= 32 bytesm = medium     		32 < x <= 256 bytesl = large      		256 < x <= 2048 bytesx = extra large		x > 2048 bytes.Cw.De.Ppwhere x is the exact size of the object being allocated by a call tomalloc.  When data is broken into categories, percentages are alwaysgiven in a two column format.Throughout this document, we refer to such a listing asa.Dq breakdown ..Sh TABLE 1: ALLOCATION BINS.PpThe memory allocation is broken down by the sizes of objects requestedand freed..Tw kept_bytes_(%).Tl sizeThe size in bytes of the object allocated or freed..Tl allocsThe number of calls to malloc requesting allocation of this size..Tl bytes (%)The total number of bytes allocated to objects of this size.  Thepercent indicates the percent of the total bytes allocated..Tl freesThe number of times objects of this size were freed..Tl kept (%)The number of bytes of objects of this size that were never freed.The percent indicates what fraction of unfreed bytes were allocated toobjects of this size.  .Tl typesA list of the program names of structure types or typedefs that defineobjects of this size..Sh TABLE 2: MEMORY LEAKS.PpThe memory leak table lists the partial call chains which allocatedmemory that was never freed.  At most five functions in the call chain arelisted..Tw kept_bytes_(%).Tl kept bytes (%)The number of bytes allocated on this partial call chainand not subsequently freed.The table is sorted by decreasing values in this field.The percent indicates the percent of total bytes not freed..Tl allocsThe number of allocations that occurred on this partial call chain..Tl bytes (%)The number of bytes allocated on this partial call chain.  The percentindicates the percent of the total bytes allocated and never freed.  .Tl freesThe number of frees that occurred on this partial call chain.  If noobjects were freed this and the following field are ommitted..Tl bytes (%)The number of bytes freed on this partial call chain.  This field isomitted if no bytes were freed..Tl pathThe partial call chain.  Call chains starting with "..." indicate thatmore callers were present, but were ommitted from the listing.  Callchains consist of function names (and possible call site offsets)separated by ">".  Call site offsets are indicated by a +nfollowing the function name, where n is the distance in bytes of thecall site from the start of the function.  Call site offsets areprinted using the -offset option..Sh TABLE 3: DIRECT ALLOCATION.PpThe <TOTAL>row of the direct allocation listing contains a summary ofall the functions where such a summary makes sense..Tw kept_bytes_(%).Tl % memPercentage of the total memory allocated that was allocated by thisfunction.  .Tl bytesThe total number of bytes allocated by this function..Tl % mem(size)Size breakdown of the memory allocated by this function as apercentage of the total memory allocated by the program.  For example,if the values for function MAIN are s=5, m=20, l=4, x=0, then directcalls to MALLOC from MAINaccount for 5+20+4+0 = 29% of the totalmemory allocated by the program.  Moreover, 20% of the total memoryallocated by the program was of medium sized objects (between 33 and256 bytes) by the function MAIN .The <TOTAL>row represents thebreakdown by size of all the memory allocated by the program..Tl bytes keptThe number of bytes allocated by this function that were never freed(by calls toFREE)..Tl % all keptThe size breakdown of objects never freed by this function as apercentage of all objects never freed.  For example, if <% all kept>values for function MAINare s=2, m=10, l=<blank>, x=<blank>, then 10%of the total bytes not freed were allocated byMAIN and were allocatedin medium-sized chunks.  The <TOTAL>row represents the size breakdownof all the memory allocated but never freed..Tl callsThe number of times this function was called to allocate an object..Tl nameThe name of the function..Sh TABLE 4: ALLOCATION CALL GRAPHA star (*) indicates that this field is omitted for ancestors ordescendents in the same cycle as the function..PpCycles are listed twice.The first appearance shows all the functionsthat are members of the cycle and the amount of memory allocatedlocally in each function, including the breakdown of the localallocation by size and the breakdown by size as a fraction of thetotal cycle.The second appearance shows what the callgraph would look like if all the functions in the cycle were mergedinto a single function..Tw kept_bytes_(%).Tl indexA unique index used to aid searching for functions in the call graph listing..Tl self + descThe percent of the total allocated memory that was allocated by thisfunction and its descendents.  .Tl self (%)The number of bytes allocated by the function itself.  The percentageindicates the fraction of the bytes allocated by the function and itsdescendents that were allocated in the function itself..Tl size-funcThe size breakdown of objects allocated in the function itself (notincluding its descendents.).Tl calledThe number of times this function was called while allocating memory..Tl recurThe number of recursive function calls while allocating memory..Tl nameThe function name including possible cycle membership and index..Sh ANCESTOR LISTINGSIf the word ``all'' appears in the <self + desc> column, then this rowrepresents a summary of all the ancestors and presents the totalnumber of bytes requested by all ancestors in the <bytes> column, andthe breakdown of these bytes by size in the <self-ances> breakdowncolumns.  If there is only one ancestor, then this summary is omitted..Tw kept_bytes_(%).Tl *self (%)The number of bytes allocated by the function and its descendents thatwere allocated on behalf of this parent.  The percentage indicateswhat fraction of the total bytes allocated by the function and itsdescendents were allocated on behalf of this parent..Tl *size-ancesThe size breakdown of the bytes allocated by the function and itsdescendents on behalf of this parent..Tl *frac-ancesThe size breakdown of the objects allocated in the function and itsdescendents on behalf of this parent as a percentage of all objectsallocated by the function and its descendents.  For example if parentP1 of function F has <frac-ances> values s=<blank>, m=<blank>, l=30,x=<blank>, then 30% of all objects allocated by F and its descendentsare of large objects allocated on behalf of parent P1..Tl calledThe number of times this parent called this function whilerequesting memory..Tl *totalThe number of calls this parent made requesting memory from any function..Tl ancestorsThe name of the parent including possible cycle membership and index..Sh DESCENDENT LISTINGSIf the word ``all'' appears in the <self + desc> column, then this rowrepresents a summary of all the descendents and presents the totalnumber of bytes allocated by all descendents in the <bytes> column,and the breakdown of these bytes by size in the <self-desc> breakdowncolumns.  If there is only one descendent, then this summary isomitted..Tw kept_bytes_(%).Tl *self (%)The number of bytes allocated in this descendent that were allocatedat the request of the function.  The percentage indicates whatfraction of the total bytes allocated in descendents of the functionwere allocated in this descendent..Tl *size-ancesThe size breakdown of the bytes allocated by this descendent on behalfof the function..Tl *frac-descThe size breakdown of the objects allocated in this descendent onbehalf of the function as a percentage of all objects allocated by alldescendents on behalf of this function.  For example if descendent C1of function F has <frac-desc> values s=35, m=<blank>, l=<blank>, x=<blank>,then 35% of all objects allocated by children of F on its behalf wereallocated in child C1 and were small objects. .Tl calledThe number of times the function called this descendent whilerequesting memory..Tl *totalThe number of times this descendent was called during a memory request..Tl descendentsThe name of the child including possible cycle membership and index..Sh FILES.Tw libc_mp.axx.Tl Pa a.out         contains symbol table information..Tl Pa mprof.data    memory allocation call graph information..Tl Pa libc_mp.aspecial version of malloc which profiles allocation.(eventually to be put in.Pa /lib/local/mprof/libc_mp.a ).Tl.Sh SEE ALSO.Xr cc 1 ,.Xr gprof 1.Rf.Rt "A Memory Allocation Profiler for C and Lisp Programs" ,Benjamin Zorn and Paul Hilfinger, Summer 1988.Tn USENIXConference..Sh AUTHORWritten by Benjamin Zorn, zorn@ernie.berkeley.edu, as part of Ph.D.research sponsored by the.Tn SPURresearch project..Sh BUGSThe code that determines the names and sizes of user types is poorlywritten and depends on the program being compiled with the -g option.In some cases (mostly very simple cases) the user type names arenot correctly determined..PpIf the user application calls.Xr vallocor.Xr memalignand later tries to free that memory,.Nm mprofwill cause a segmentation fault.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -