Changes in / [a95c117:0300979]
- Location:
- src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/heap.c
ra95c117 r0300979 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jul 25 16:42:02201813 // Update Count : 4 3812 // Last Modified On : Thu Jul 26 22:28:23 2018 13 // Update Count : 449 14 14 // 15 15 … … 111 111 // return temp; 112 112 // } // prtHeapTermOff 113 114 115 #ifdef __CFA_DEBUG__ 116 static unsigned int allocfree; // running total of allocations minus frees 117 static unsigned int appStart; // storage allocation when application starts 118 119 static void checkUnfreed() { 120 unsigned int total = allocfree - appStart; 121 if ( total != 0 ) { 122 // DO NOT USE STREAMS AS THEY MAY BE UNAVAILABLE AT THIS POINT. 123 // char helpText[512]; 124 // int len = snprintf( helpText, 512, "CFA warning (UNIX pid:%ld) : program terminating with %u(0x%x) bytes of storage allocated but not freed.\n" 125 // "Possible cause is unfreed storage allocated by the program or system/library routines called from the program.\n", 126 // (long int)getpid(), total, total ); // always print the UNIX pid 127 // __cfaabi_dbg_bits_write( helpText, len ); 128 } // if 129 } // checkUnfreed 130 131 extern "C" { 132 void heapAppStart() { // called by __cfaabi_appready_startup 133 appStart = allocfree; 134 } // heapAppStart 135 136 void heapAppStop() { // called by __cfaabi_appready_startdown 137 checkUnfreed(); 138 } // heapAppStop 139 } // extern "C" 140 #endif // __CFA_DEBUG__ 113 141 114 142 … … 139 167 static int mmapFd = -1; // fake or actual fd for anonymous file 140 168 141 static unsigned int allocfree; // running total of allocations minus frees142 static unsigned int appStart; // storage allocation when application starts143 144 static void checkUnfreed() {145 #ifdef __CFA_DEBUG__146 unsigned int total = allocfree - appStart;147 if ( total != 0 ) {148 // DO NOT USE STREAMS AS THEY MAY BE UNAVAILABLE AT THIS POINT.149 // char helpText[512];150 // int len = snprintf( helpText, 512, "CFA warning (UNIX pid:%ld) : program terminating with %u(0x%x) bytes of storage allocated but not freed.\n"151 // "Possible cause is unfreed storage allocated by the program or system/library routines called from the program.\n",152 // (long int)getpid(), total, total ); // always print the UNIX pid153 // __cfaabi_dbg_bits_write( helpText, len );154 } // if155 #endif // __CFA_DEBUG__156 } // checkUnfreed157 158 #ifdef __CFA_DEBUG__159 extern "C" {160 void heapAppStart() { // called by __cfaabi_appready_startup161 appStart = allocfree;162 } // heapAppStart163 164 void heapAppStop() { // called by __cfaabi_appready_startdown165 checkUnfreed();166 } // heapAppStop167 } // extern "C"168 #endif // __CFA_DEBUG__169 170 169 171 170 struct HeapManager { … … 178 177 union { 179 178 struct { // 32-bit word => 64-bit header, 64-bit word => 128-bit header 180 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __ U_WORDSIZE__ == 32179 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_POINTER__ == 4 181 180 uint32_t padding; // unused, force home/blocksize to overlay alignment in fake header 182 #endif // __ U_WORDSIZE__ == 32&& __U_WORDSIZE__ == 32181 #endif // __ORDER_BIG_ENDIAN__ && __U_WORDSIZE__ == 32 183 182 184 183 union { … … 191 190 }; 192 191 193 #if __BYTE_ORDER__ == __ORDER_ BIG_ENDIAN__ && __U_WORDSIZE__ == 32192 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ && __SIZEOF_POINTER__ == 4 194 193 uint32_t padding; // unused, force home/blocksize to overlay alignment in fake header 195 #endif // __ U_WORDSIZE__ == 32&& __U_WORDSIZE__ == 32194 #endif // __ORDER_LITTLE_ENDIAN__ && __U_WORDSIZE__ == 32 196 195 197 196 }; … … 204 203 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 205 204 uint32_t alignment; // low-order bits of home/blockSize used for tricks 206 #endif // __ BYTE_ORDER__205 #endif // __ORDER_LITTLE_ENDIAN__ 207 206 208 207 uint32_t offset; … … 210 209 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 211 210 uint32_t alignment; // low-order bits of home/blockSize used for tricks 212 #endif // __ BYTE_ORDER__211 #endif // __ORDER_BIG_ENDIAN__ 213 212 } fake; 214 213 } kind; … … 305 304 #endif // __CFA_DEBUG__ 306 305 306 assert( heapManager.heapBegin == 0 ); 307 307 heapManager{}; 308 308 } // memory_startup … … 672 672 673 673 static inline void * malloc2( size_t size ) { // necessary for malloc statistics 674 assert( heapManager.heapBegin != 0 ) ; // heap started 674 assert( heapManager.heapBegin != 0 ); 675 675 void * area = doMalloc( size ); 676 676 if ( unlikely( area == 0 ) ) errno = ENOMEM; // POSIX -
src/libcfa/stdlib
ra95c117 r0300979 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jul 23 07:44:47201813 // Update Count : 34 112 // Last Modified On : Fri Jul 27 07:21:36 2018 13 // Update Count : 345 14 14 // 15 15 … … 19 19 extern "C" { 20 20 void * memalign( size_t align, size_t size ); // malloc.h 21 void * memset( void * dest, int c, size_t size );// string.h21 void * memset( void * dest, int fill, size_t size ); // string.h 22 22 void * memcpy( void * dest, const void * src, size_t size ); // string.h 23 23 void * cmemalign( size_t alignment, size_t noOfElems, size_t elemSize ); // CFA … … 127 127 // data, non-array types 128 128 129 T * memset( T * dest, char c) {130 return (T *)memset( dest, c, sizeof(T) );129 T * memset( T * dest, char fill ) { 130 return (T *)memset( dest, fill, sizeof(T) ); 131 131 } // memset 132 132 … … 139 139 // data, array types 140 140 141 T * memset( T dest[], size_t dim, char c) {142 return (T *)(void *)memset( dest, c, dim * sizeof(T) );// C memset143 } // memset144 145 T * memcpy( T dest[], const T src[], size_t dim ) {141 T * amemset( T dest[], char fill, size_t dim ) { 142 return (T *)(void *)memset( dest, fill, dim * sizeof(T) ); // C memset 143 } // amemset 144 145 T * amemcpy( T dest[], const T src[], size_t dim ) { 146 146 return (T *)(void *)memcpy( dest, src, dim * sizeof(T) ); // C memcpy 147 } // memcpy147 } // amemcpy 148 148 } // distribution 149 149 … … 203 203 E * bsearchu( E key, const E * vals, size_t dim ); 204 204 size_t bsearchu( E key, const E * vals, size_t dim ); 205 206 void qsort( E * vals, size_t dim );207 205 } // distribution 208 206 … … 214 212 E * bsearchu( K key, const E * vals, size_t dim ); 215 213 size_t bsearchu( K key, const E * vals, size_t dim ); 214 } // distribution 215 216 forall( otype E | { int ?<?( E, E ); } ) { 217 void qsort( E * vals, size_t dim ); 216 218 } // distribution 217 219 -
src/tests/.expect/alloc.txt
ra95c117 r0300979 49 49 CFA array memset 50 50 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 51 CFA memcpy51 CFA array memcpy 52 52 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 0xffffffff -nan, 53 53 -
src/tests/alloc.c
ra95c117 r0300979 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jul 25 09:09:43201813 // Update Count : 33 112 // Last Modified On : Thu Jul 26 20:58:05 2018 13 // Update Count : 334 14 14 // 15 15 … … 219 219 printf( "\n" ); 220 220 221 memset( sta, dim, fill );// CFA array memset, type safe221 amemset( sta, fill, dim ); // CFA array memset, type safe 222 222 printf( "CFA array memset\n" ); 223 223 for ( int i = 0; i < dim; i += 1 ) { printf( "%#x %a, ", sta[i].x, sta[i].y ); } 224 224 printf( "\n" ); 225 225 226 memcpy( sta1, sta, dim );// CFA array memcpy, type safe227 printf( "CFA memcpy\n" );226 amemcpy( sta1, sta, dim ); // CFA array memcpy, type safe 227 printf( "CFA array memcpy\n" ); 228 228 for ( int i = 0; i < dim; i += 1 ) { printf( "%#x %a, ", sta1[i].x, sta1[i].y ); } 229 229 printf( "\n" );
Note: See TracChangeset
for help on using the changeset viewer.