I find headSTRUCTSIZE is defined as a const variable, but my compiler always optimizate it.
I have check the disassemble file os heap5.o, and I found the code "puc -= heapSTRUCT_SIZE;" is translated into "SUBS r4,r4,#8" automatically.
Is there any difference between "define heapSTRUCT_SIZE as a const variable" and "define heapSTRUCT_SIZE as a macro"?
static const uint16t heapSTRUCTSIZE = ( ( sizeof ( BlockLinkt ) + ( portBYTEALIGNMENT - 1 ) ) & ~portBYTEALIGNMENTMASK );
void vPortFree( void *pv , RAMTYPE ramType)
uint8t *puc = ( uint8t * ) pv;
if( pv != NULL )
/* The memory being freed will have an BlockLink_t structure immediately
before it. */
puc -= heapSTRUCT_SIZE;
/* This casting is to keep the compiler from issuing warnings. */
pxLink = ( void * ) puc;
/* ignore some lines */
If you use a macro with low or no compiler optimization it will be calculated each time it is used. If you use a const then it is calculated when you compile the program.
I think the fact is always the opposite. If we use a const and close the compiler's optimization, some variable reference this const may calculated everytime when program run.