Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/heap.cfa

    r1aa6ecb ra92a4fe  
    1010// Created On       : Tue Dec 19 21:58:35 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Fri Oct 18 07:42:09 2019
    13 // Update Count     : 556
     12// Last Modified On : Wed Jul 24 13:12:45 2019
     13// Update Count     : 550
    1414//
    1515
     
    541541        // along with the block and is a multiple of the alignment size.
    542542
    543   if ( unlikely( size > ~0ul - sizeof(HeapManager.Storage) ) ) return 0;
    544543        size_t tsize = size + sizeof(HeapManager.Storage);
    545544        if ( likely( tsize < mmapStart ) ) {                            // small size => sbrk
     
    593592                block->header.kind.real.home = freeElem;                // pointer back to free list of apropriate size
    594593        } else {                                                                                        // large size => mmap
    595   if ( unlikely( size > ~0ul - pageSize ) ) return 0;
    596594                tsize = libCeiling( tsize, pageSize );                  // must be multiple of page size
    597595                #ifdef __STATISTICS__
     
    890888        } // realloc
    891889
     890
    892891        // The obsolete function memalign() allocates size bytes and returns a pointer to the allocated memory. The memory
    893892        // address will be a multiple of alignment, which must be a power of two.
     
    993992        size_t malloc_alignment( void * addr ) {
    994993          if ( unlikely( addr == 0 ) ) return libAlign();       // minimum alignment
    995                 HeapManager.Storage.Header * header = headerAddr( addr );
     994                HeapManager.Storage.Header * header = (HeapManager.Storage.Header *)( (char *)addr - sizeof(HeapManager.Storage) );
    996995                if ( (header->kind.fake.alignment & 1) == 1 ) { // fake header ?
    997996                        return header->kind.fake.alignment & -2;        // remove flag from value
     
    10051004        bool malloc_zero_fill( void * addr ) {
    10061005          if ( unlikely( addr == 0 ) ) return false;            // null allocation is not zero fill
    1007                 HeapManager.Storage.Header * header = headerAddr( addr );
     1006
     1007                HeapManager.Storage.Header * header = (HeapManager.Storage.Header *)( (char *)addr - sizeof(HeapManager.Storage) );
    10081008                if ( (header->kind.fake.alignment & 1) == 1 ) { // fake header ?
    10091009                        header = (HeapManager.Storage.Header *)((char *)header - header->kind.fake.offset);
Note: See TracChangeset for help on using the changeset viewer.