0

我分配了内存:

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

然后我输入它:

char *new = (char *)p;

我取消分配它:

free(new);

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

4

2 回答 2

1

当您调用malloc(或其中一个兄弟姐妹)时,分配的内存大小将其存储为“有关此分配的信息”(info_block)的一部分。malloc不知道您是否传入sizeof(int),常量4​​或sizeof(short)*2其他任何您可能给它的东西[实际上,它很可能将分配扩展到 16 个字节-并且此大小存储为分配的一部分。

当您稍后调用 时free,它会“找回” info_block,然后它知道要释放的大小。因此,您对指针进行的强制转换或其他操作都没有关系 - 只要里面的指针是相同的值。

于 2013-02-20T11:11:07.710 回答
0

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

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

但我相信你会收到警告。

因此,在您的情况下,分配的是 4 个字节。

此外,您不应从 malloc 中转换 void*:

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

很好。

于 2013-02-20T10:45:53.993 回答