我分配了内存:
int *p = (int *) malloc(sizeof(int));然后我把它打出来:
char *new = (char *)p;我解除它的分配:
free(new);1)当字符有1个字节的空间时,将释放多少内存? 2)内存管理器应该(在嵌入式系统中)建立什么内部机制来跟踪分配的内存和释放的内存?(不允许布尔值)
发布于 2013-02-20 19:11:08
当您调用malloc (或它的兄弟之一)时,内存分配的大小会将其存储为“关于此分配的信息”(info_block)的一部分。malloc不知道你是否传入了sizeof(int),常量4或sizeof(short)*2,或者你给它的其他任何东西[实际上,它很可能将分配扩展到,比如说,16个字节-这个大小被存储为分配的一部分。
当您稍后调用free时,它将“找到”info_block,然后它知道要释放的大小。所以,不管是什么类型转换,或者你对指针做的其他操作-只要里面的指针是相同的值就行。
发布于 2013-02-20 18:45:54
在您的特定情况下,答案取决于底层架构。假设32位机器,指针的大小始终是4字节。如果你使用它,它可能会变得很麻烦。
int *p = (int *) malloc(sizeof(char));但我相信你会得到警告的。
所以在你的例子中,被分配的是4个字节。
此外,您不应该从malloc中强制转换void*:
int *p = malloc(sizeof(int));完全没问题。
https://stackoverflow.com/questions/14977755
复制相似问题