typedef long Int32;
typedef char Bool;
#define NULL 0
#define TRUE (1 == 1)
#define FALSE (0 == 1)
typedef struct blockhead_t {
Int32 signature;
Bool allocated;
unsigned long size;
struct blockhead_t *next;
struct blockhead_t *prev;
} blockhead;
static blockhead *gHeapBase = NULL;
static inline int mmalloc_init(unsigned char *heap, unsigned long size)
{
if (gHeapBase != NULL) return -1;
DPRINTK("malloc_init(): initialize heap area at 0x%08lx, size = 0x%08lx\n",
heap, size);
gHeapBase = (blockhead *)(heap);
gHeapBase->allocated=FALSE;
gHeapBase->signature=BLOCKHEAD_SIGNATURE;
gHeapBase->next=NULL;
gHeapBase->prev=NULL;
gHeapBase->size = size - sizeof(blockhead);
return 0;
}
上面这段代码是从heap.c中拿出来的,为什么gHeapBase不为NULL, 但把gHeapBase = (blockhead *)(heap);去掉,则gHeapBase就为NULL了,arm_linux_gcc 4.3.2是不是有bug?