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