@@ -45,20 +45,21 @@ static uint32_t free_blocks_count; /* track fragmentation */
45
45
/* Validate block integrity */
46
46
static inline bool validate_block (memblock_t * block )
47
47
{
48
- if (!IS_VALID_BLOCK (block ))
48
+ if (unlikely ( !IS_VALID_BLOCK (block ) ))
49
49
return false;
50
50
51
51
size_t size = GET_SIZE (block );
52
- if (!size || size > MALLOC_MAX_SIZE )
52
+ if (unlikely ( !size || size > MALLOC_MAX_SIZE ) )
53
53
return false;
54
54
55
55
/* Check if block extends beyond heap */
56
- if ((uint8_t * ) block + sizeof (memblock_t ) + size > (uint8_t * ) heap_end )
56
+ if (unlikely ((uint8_t * ) block + sizeof (memblock_t ) + size >
57
+ (uint8_t * ) heap_end ))
57
58
return false;
58
59
59
- if (block -> next &&
60
- (uint8_t * ) block + sizeof (memblock_t ) + GET_SIZE (block ) !=
61
- (uint8_t * ) block -> next )
60
+ if (unlikely ( block -> next &&
61
+ (uint8_t * ) block + sizeof (memblock_t ) + GET_SIZE (block ) !=
62
+ (uint8_t * ) block -> next ) )
62
63
return false;
63
64
64
65
return true;
@@ -75,7 +76,7 @@ void free(void *ptr)
75
76
memblock_t * p = ((memblock_t * ) ptr ) - 1 ;
76
77
77
78
/* Validate the block being freed */
78
- if (!validate_block (p ) || !IS_USED (p )) {
79
+ if (unlikely ( !validate_block (p ) || !IS_USED (p ) )) {
79
80
CRITICAL_LEAVE ();
80
81
panic (ERR_HEAP_CORRUPT );
81
82
return ; /* Invalid or double-free */
@@ -100,7 +101,7 @@ void free(void *ptr)
100
101
}
101
102
102
103
if (prev && !IS_USED (prev )) {
103
- if (!validate_block (prev )) {
104
+ if (unlikely ( !validate_block (prev ) )) {
104
105
CRITICAL_LEAVE ();
105
106
panic (ERR_HEAP_CORRUPT );
106
107
return ;
@@ -120,7 +121,7 @@ static void selective_coalesce(void)
120
121
121
122
while (p && p -> next ) {
122
123
/* Merge only when blocks are FREE *and* adjacent in memory */
123
- if (!validate_block (p )) {
124
+ if (unlikely ( !validate_block (p ) )) {
124
125
panic (ERR_HEAP_CORRUPT );
125
126
return ;
126
127
}
@@ -155,7 +156,7 @@ void *malloc(uint32_t size)
155
156
156
157
memblock_t * p = first_free ;
157
158
while (p ) {
158
- if (!validate_block (p )) {
159
+ if (unlikely ( !validate_block (p ) )) {
159
160
CRITICAL_LEAVE ();
160
161
panic (ERR_HEAP_CORRUPT );
161
162
return NULL ; /* Heap corruption detected */
@@ -254,7 +255,7 @@ void *realloc(void *ptr, uint32_t size)
254
255
memblock_t * old_block = ((memblock_t * ) ptr ) - 1 ;
255
256
256
257
/* Validate the existing block */
257
- if (!validate_block (old_block ) || !IS_USED (old_block )) {
258
+ if (unlikely ( !validate_block (old_block ) || !IS_USED (old_block ) )) {
258
259
panic (ERR_HEAP_CORRUPT );
259
260
return NULL ;
260
261
}
0 commit comments