home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / c_all592.arj / TI863.ASC < prev    next >
Text File  |  1992-03-17  |  3KB  |  133 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.   PRODUCT  :  Borland C++                            NUMBER  :  863
  9.   VERSION  :  3.0
  10.        OS  :  WIN
  11.      DATE  :  March 17, 1992                           PAGE  :  1/2
  12.  
  13.     TITLE  :  Understanding Memory Allocation Under Windows
  14.  
  15.  
  16.  
  17.  
  18.   This document is a brief summary of how functions such as malloc,
  19.   calloc, and new allocate memory in a Windows application created
  20.   with Borland C++ 3.0
  21.  
  22.   In all cases, new calls malloc to allocate the memory.  What
  23.   happens next depends on the memory model your in and whether your
  24.   building a Dynamic Link Library (.DLL) or an Exectuable (.EXE).
  25.  
  26.   If you are in the small or medium memory model building an .EXE
  27.   file, where data pointers default to near...
  28.  
  29.        new calls malloc which calls LocalAlloc( LMEM_FIXED );
  30.        calloc calls LocalAlloc( LMEM_FIXED | LMEM_ZEROINIT );
  31.  
  32.   If you are in the compact or large model building an .EXE file,
  33.   where data pointers default to far, malloc calls farmalloc...
  34.  
  35.        new calls malloc which calls farmalloc which calls
  36.        GlobalLock( GlobalAlloc( GMEM_MOVEABLE | _WinAllocFlag ) );
  37.  
  38.        calloc calls farcalloc which ultimately make a call to
  39.        GlobalLock( GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT |
  40.        _WinAllocFlag );
  41.  
  42.   If you are in any memory model (Small, Medium, Compact, or Large)
  43.   building a .DLL file, all data pointers, by default, are far and
  44.   the procedure used by the Runtime Library to allocate memory is
  45.   exactly the same as a large model .EXE.  Large model .EXE files
  46.   are discussed in the previous paragraph.
  47.  
  48.   _WinAllocFlag is a WORD in the startup code which is always 0.
  49.   One could set it to GMEM_SHARE or whatever other flags are needed
  50.   before doing a new or malloc.  To use it, first make an extern
  51.   for it in your program...
  52.  
  53.        extern WORD _WinAllocFlag;
  54.  
  55.   Some additional Notes, in Borland C++ 3.0, and in the Object
  56.   Windows Library for Borland C++ 2.0, Borland has implemented a
  57.   suballocation scheme for use with global allocations.  This means
  58.   memory is allocated as discussed before, but if a memory request
  59.   is small, a pointer will be returned into a larger chunk.  This
  60.   reduces the amount of selectors Windows has to allocate.
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.   PRODUCT  :  Borland C++                            NUMBER  :  863
  75.   VERSION  :  3.0
  76.        OS  :  WIN
  77.      DATE  :  March 17, 1992                           PAGE  :  2/2
  78.  
  79.     TITLE  :  Understanding Memory Allocation Under Windows
  80.  
  81.  
  82.  
  83.  
  84.   In Borland C++ 3.0, the size of the chunks the runtime library
  85.   allocates are always 4K of RAM.  If you ask for more than 4K, the
  86.   request for memory goes straight to GlobalAlloc, and you can
  87.   expect an offset of 0 for your pointer.
  88.  
  89.   In BC3, if you link to the static libraries and you set
  90.   _WinAllocFlag to GMEM_DDESHARE before doing an allocation, we do
  91.   not use the sub allocator, your memory request maps directly to
  92.   GlobalAlloc.  Several customers have suggested this be changed in
  93.   a future release.  Borland is currently looking into this matter.
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.