内存分配查找

时间:2013-02-20 10:37:32

标签: c memory memory-management

我分配了内存:

int *p = (int *) malloc(sizeof(int));

然后我将其打字:

char *new = (char *)p;

我解除了它:

free(new);

1)当字符有1个字节的空间时,将释放多少内存? 2)内存管理器应该采用什么内部机制(在嵌入式系统中)来跟踪分配的内存和释放的内存? (不允许布尔值)

2 个答案:

答案 0 :(得分:1)

当您调用malloc(或其中一个兄弟姐妹)时,内存大小将其存储为“有关此分配的信息”(info_block)的一部分。 malloc不知道您是否传递了sizeof(int),常数4sizeof(short)*2或您提供的任何其他内容[实际上,它可能会将分配扩展到比方说,16个字节 - 这个大小存储为分配的一部分。

当您稍后致电free时,它会“找回”info_block,然后它知道要释放的大小。因此,只要内部指针是相同的值,对指针执行什么操作或其他操作都无关紧要。

答案 1 :(得分:0)

我的具体案例,答案取决于底层架构。假设一台32位机器,指针的大小总是4个字节。如果你使用它可能会很麻烦,即

int *p = (int *) malloc(sizeof(char));

但是我相信你会收到警告。

所以在你的情况下,它被分配了4个字节。

此外,您不应该从malloc:

转换void *
int *p = malloc(sizeof(int));

非常好。