Provided by: manpages-zh_1.5.2-1_all bug


       ckalloc,    memory,    ckfree,    Tcl_DisplayMemory,    Tcl_InitMemory,
       Tcl_ValidateAllMemory - 合法的記憶體分配接口

       memory info

       memory trace [on|off]

       memory validate [on|off]

       memory trace_on_at_malloc nnn

       memory break_on_malloc nnn

       memory display file

       #include <tcl.h>

       char *
       ckalloc (unsigned size)

       ckfree (char *ptr)

       Tcl_DumpActiveMemory (char *fileName);

       Tcl_ValidateAllMemory (char *file,
                              int   line)

       Tcl_InitMemory (interp)


       Tcl_Interp *fileName uint size in

       char *ptr in Tcl_Interp *interp in A pointer to  the  Tcl  interpreter.
       char *file in The filename of the caller of Tcl_ValidateAllMemory.  int
       line in The line number of the caller of  Tcl_ValidateAllMemory.   char
       *fileName in File to display list of active memory.

       This  macro  allocates  memory,  in the same manner as malloc, with the
       following differences: One, ckalloc  checks  the  value  returned  from
       malloc  (it  calls malloc for you) and panics if the allocation request
       fails.  Two, if enabled at compile time,  a  version  of  ckalloc  with
       special  memory  debugging  capabilities replaces the normal version of
       ckalloc, which aids in detecting memory overwrites and leaks  (repeated
       allocations not matched by corresponding frees).

         o size - The size of the memory block to be allocated.

         A pointer to the allocated memory block.

       This  macro  frees  memory  allocated  by  ckalloc.  Like ckalloc, when
       memory debugging is  enabled,  ckfree  has  enhanced  capabilities  for
       detecting memory overwrites and leaks.

       It  is  very  important  that you use ckalloc when you need to allocate
       memory, and that you use ckfree to free it.  Should you use  malloc  to
       allocate  and  ckfree  to  free, spurious memory validation errors will
       occur when memory debugging is enabled.  Should you use  free  to  free
       memory  allocated  by ckalloc, memory corruption will occur when memory
       debugging is enabled.  Any memory that is to be become the property  of
       the  Tcl  interpreter,  such  as  result  space, must be allocated with
       ckalloc.  If it is absolutely necessary for an application to pass back
       malloced  memory  to Tcl, it will work only if Tcl is complied with the
       TCL_MEM_DEBUG flag turned off.  If you convert your application to  use
       this  facility, it will help you find memory over runs and lost memory.
       Note that memory allocated by a C  library  routine  requiring  freeing
       should  still  be  freed  with  free, since it calls malloc rather than
       ckalloc to do the allocation.

         o ptr - The address of a block to free, as returned by ckalloc.

       This function will output a list of all currently allocated  memory  to
       the  specified  file.   The following information is outputted for each
       allocated block of memory: starting  and  ending  addresses  (excluding
       guard zone), size, source file where ckalloc was called to allocate the
       block and line number in that file.  It is especially  useful  to  call
       Tcl_DumpActiveMemory after the Tcl interpreter has been deleted.

         o fileName - The name of the file to output the memory list to.

       Forces  a  validation  of  the  guard  zones of all currently allocated
       blocks of memory.  Normally validation  of  a  block  occurs  when  its
       freed,  unless  full validation is enabled, in which case validation of
       all blocks occurs when ckalloc and ckfree are  called.   This  function
       forces the validation to occur at any point.

         o  file  -  The file that this routine is being called from, normally
         o line - The line that this routine is being  called  from,  normally


       To  enable memory debugging, Tcl should be recompiled from scratch with
       TCL_MEM_DEBUG defined.  This will also compile in a non-stub version of
       Tcl_InitMemory to add the memory command to Tcl.

       TCL_MEM_DEBUG  must be either left defined for all modules or undefined
       for all modules that are going to be linked together.  If they are not,
       link  errors  will  occur, with either TclDbCkfree and Tcl_DbCkalloc or
       Tcl_Ckalloc and Tcl_Ckfree being undefined.


       When memory debugging is enabled, whenever a call to ckalloc  is  made,
       slightly  more  memory  than  requested  is  allocated  so  the  memory
       debugging code can keep track of the allocated memory, and also  eight-
       byte  ``guard  zones'' are placed in front of and behind the space that
       will be returned to the caller.  (The size of the guard zone is defined
       by  the  C  #define  GUARD_SIZE  in baseline/src/ckalloc.c -- it can be
       extended if you suspect large  overwrite  problems,  at  some  cost  in
       performance.)   A known pattern is written into the guard zones and, on
       a call to ckfree, the guard zones of the space being freed are  checked
       to  see  if either zone has been modified in any way.  If one has been,
       the guard bytes and their new contents  are  identified,  and  a  ``low
       guard failed'' or ``high guard failed'' message is issued.  The ``guard
       failed'' message includes the address of the memory packet and the file
       name  and  line number of the code that called ckfree.  This allows you
       to detect the common sorts of one-off problems, where not enough  space
       was allocated to contain the data written, for example.


       memory options
              The  Tcl memory command gives the Tcl developer control of Tcl's
              memory debugging capabilities.  The memory command  has  several
              suboptions,  which  are  described  below.  It is only available
              when Tcl has been compiled with memory debugging enabled.

       memory info
              生成一個報告,包含自從                                       Tcl
              ckfree                    的調用的到                     ckalloc

       memory trace [on|off]
              使記憶體跟蹤開啟或關閉。在開啟記憶體跟蹤的時候,對       ckalloc
              的每次調用都導致向          stderr    寫一行跟蹤信息,其組成有字
              ckalloc,隨後是返回的地址,分配的記憶體總數,和進行分配的      C

                 ckalloc 40e478 98 tclProc.c 1406

              Calls  to  ckfree are traced in the same manner, except that the
              word ckalloc is replaced by the word ckfree.

       memory validate [on|off]
              使記憶體生效(validation)開啟或關閉。在開啟記憶體生效的時候,在對ckallocckfree          的每次調用上,檢查用         ckalloc

       memory trace_on_at_malloc nnn
              在進行了             count             數目              ckalloc
              之後啟用記憶體跟蹤。例如,如果你鍵入了 memory trace_on_at_malloc
              100,在第              100            次調用             ckalloc
              Tcl  啟動以來發生的記憶體分配的當前數目。

       memory break_on_malloc nnn
              在進行了            count             數目的             ckalloc
              分配之後,輸出一個(中斷)消息,表示它現在想進入  C  調試器。  Tcl
              將向自身發出一個  SIGINT   信號。如果你在一個  C    調試器下運行

       memory display file


       Normally,  Tcl compiled with memory debugging enabled will make it easy
       to isolate a corruption problem.  Turning on memory validation with the
       memory command can help isolate difficult problems.  If you suspect (or
       know) that corruption is occurring before the Tcl interpreter comes  up
       far  enough for you to issue commands, you can set MEM_VALIDATE define,
       recompile tclCkalloc.c  and  rebuild  Tcl.   This  will  enable  memory
       validation   from  the  first  call  to  ckalloc,  again,  at  a  large
       performance impact.

       If you are desperate and validating memory on every call to ckalloc and
       ckfree  isn't  enough,  you  can  explicitly call Tcl_ValidateAllMemory
       directly at any point.  It takes a char * and an int which are normally
       the  filename  and  line number of the caller, but they can actually be
       anything you want.  Remember to remove the calls  after  you  find  the

       ckalloc, ckfree, free, memory, malloc



《中國 Linux 論壇 man 手冊頁翻譯計劃》: