我分配了内存:
int *p = (int *) malloc(sizeof(int));
然后我输入它:
char *new = (char *)p;
我取消分配它:
free(new);
1) 当字符有 1 个字节的空间时,将释放多少内存?2)内存管理器(在嵌入式系统中)应该建立什么样的内部机制来跟踪分配的内存和释放的内存?(不允许布尔值)
我分配了内存:
int *p = (int *) malloc(sizeof(int));
然后我输入它:
char *new = (char *)p;
我取消分配它:
free(new);
1) 当字符有 1 个字节的空间时,将释放多少内存?2)内存管理器(在嵌入式系统中)应该建立什么样的内部机制来跟踪分配的内存和释放的内存?(不允许布尔值)
当您调用malloc
(或其中一个兄弟姐妹)时,分配的内存大小将其存储为“有关此分配的信息”(info_block
)的一部分。malloc
不知道您是否传入sizeof(int)
,常量4
或sizeof(short)*2
其他任何您可能给它的东西[实际上,它很可能将分配扩展到 16 个字节-并且此大小存储为分配的一部分。
当您稍后调用 时free
,它会“找回” info_block
,然后它知道要释放的大小。因此,您对指针进行的强制转换或其他操作都没有关系 - 只要里面的指针是相同的值。
在您的具体情况下,答案取决于底层架构。假设一台 32 位机器,指针的大小总是 4 个字节。如果你使用它可能会很麻烦,即
int *p = (int *) malloc(sizeof(char));
但我相信你会收到警告。
因此,在您的情况下,分配的是 4 个字节。
此外,您不应从 malloc 中转换 void*:
int *p = malloc(sizeof(int));
很好。