Changes in / [0300979:a95c117]
- Location:
- src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/heap.c
r0300979 ra95c117 10 10 // Created On : Tue Dec 19 21:58:35 2017 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jul 26 22:28:23201813 // Update Count : 4 4912 // Last Modified On : Wed Jul 25 16:42:02 2018 13 // Update Count : 438 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 frees117 static unsigned int appStart; // storage allocation when application starts118 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 pid127 // __cfaabi_dbg_bits_write( helpText, len );128 } // if129 } // checkUnfreed130 131 extern "C" {132 void heapAppStart() { // called by __cfaabi_appready_startup133 appStart = allocfree;134 } // heapAppStart135 136 void heapAppStop() { // called by __cfaabi_appready_startdown137 checkUnfreed();138 } // heapAppStop139 } // extern "C"140 #endif // __CFA_DEBUG__141 113 142 114 … … 167 139 static int mmapFd = -1; // fake or actual fd for anonymous file 168 140 141 static unsigned int allocfree; // running total of allocations minus frees 142 static unsigned int appStart; // storage allocation when application starts 143 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 pid 153 // __cfaabi_dbg_bits_write( helpText, len ); 154 } // if 155 #endif // __CFA_DEBUG__ 156 } // checkUnfreed 157 158 #ifdef __CFA_DEBUG__ 159 extern "C" { 160 void heapAppStart() { // called by __cfaabi_appready_startup 161 appStart = allocfree; 162 } // heapAppStart 163 164 void heapAppStop() { // called by __cfaabi_appready_startdown 165 checkUnfreed(); 166 } // heapAppStop 167 } // extern "C" 168 #endif // __CFA_DEBUG__ 169 169 170 170 171 struct HeapManager { … … 177 178 union { 178 179 struct { // 32-bit word => 64-bit header, 64-bit word => 128-bit header 179 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __ SIZEOF_POINTER__ == 4180 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __U_WORDSIZE__ == 32 180 181 uint32_t padding; // unused, force home/blocksize to overlay alignment in fake header 181 #endif // __ ORDER_BIG_ENDIAN__&& __U_WORDSIZE__ == 32182 #endif // __U_WORDSIZE__ == 32 && __U_WORDSIZE__ == 32 182 183 183 184 union { … … 190 191 }; 191 192 192 #if __BYTE_ORDER__ == __ORDER_ LITTLE_ENDIAN__ && __SIZEOF_POINTER__ == 4193 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __U_WORDSIZE__ == 32 193 194 uint32_t padding; // unused, force home/blocksize to overlay alignment in fake header 194 #endif // __ ORDER_LITTLE_ENDIAN__&& __U_WORDSIZE__ == 32195 #endif // __U_WORDSIZE__ == 32 && __U_WORDSIZE__ == 32 195 196 196 197 }; … … 203 204 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 204 205 uint32_t alignment; // low-order bits of home/blockSize used for tricks 205 #endif // __ ORDER_LITTLE_ENDIAN__206 #endif // __BYTE_ORDER__ 206 207 207 208 uint32_t offset; … … 209 210 #if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ 210 211 uint32_t alignment; // low-order bits of home/blockSize used for tricks 211 #endif // __ ORDER_BIG_ENDIAN__212 #endif // __BYTE_ORDER__ 212 213 } fake; 213 214 } kind; … … 304 305 #endif // __CFA_DEBUG__ 305 306 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 ); 674 assert( heapManager.heapBegin != 0 ) ; // heap started 675 675 void * area = doMalloc( size ); 676 676 if ( unlikely( area == 0 ) ) errno = ENOMEM; // POSIX -
src/libcfa/stdlib
r0300979 ra95c117 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jul 27 07:21:36201813 // Update Count : 34 512 // Last Modified On : Mon Jul 23 07:44:47 2018 13 // Update Count : 341 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 fill, size_t size );// string.h21 void * memset( void * dest, int c, 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 fill) {130 return (T *)memset( dest, fill, sizeof(T) );129 T * memset( T * dest, char c ) { 130 return (T *)memset( dest, c, sizeof(T) ); 131 131 } // memset 132 132 … … 139 139 // data, array types 140 140 141 T * amemset( T dest[], char fill, size_t dim) {142 return (T *)(void *)memset( dest, fill, dim * sizeof(T) );// C memset143 } // amemset144 145 T * amemcpy( T dest[], const T src[], size_t dim ) {141 T * memset( T dest[], size_t dim, char c ) { 142 return (T *)(void *)memset( dest, c, dim * sizeof(T) ); // C memset 143 } // memset 144 145 T * memcpy( T dest[], const T src[], size_t dim ) { 146 146 return (T *)(void *)memcpy( dest, src, dim * sizeof(T) ); // C memcpy 147 } // amemcpy147 } // memcpy 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 ); 205 207 } // distribution 206 208 … … 212 214 E * bsearchu( K key, const E * vals, size_t dim ); 213 215 size_t bsearchu( K key, const E * vals, size_t dim ); 214 } // distribution215 216 forall( otype E | { int ?<?( E, E ); } ) {217 void qsort( E * vals, size_t dim );218 216 } // distribution 219 217 -
src/tests/.expect/alloc.txt
r0300979 ra95c117 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 arraymemcpy51 CFA 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
r0300979 ra95c117 10 10 // Created On : Wed Feb 3 07:56:22 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Jul 26 20:58:05201813 // Update Count : 33 412 // Last Modified On : Wed Jul 25 09:09:43 2018 13 // Update Count : 331 14 14 // 15 15 … … 219 219 printf( "\n" ); 220 220 221 amemset( sta, fill, dim );// CFA array memset, type safe221 memset( sta, dim, fill ); // 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 amemcpy( sta1, sta, dim );// CFA array memcpy, type safe227 printf( "CFA arraymemcpy\n" );226 memcpy( sta1, sta, dim ); // CFA array memcpy, type safe 227 printf( "CFA 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.