首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存分配查找

内存分配查找
EN

Stack Overflow用户
提问于 2013-02-20 18:37:32
回答 2查看 111关注 0票数 0

我分配了内存:

代码语言:javascript
复制
int *p = (int *) malloc(sizeof(int));

然后我把它打出来:

代码语言:javascript
复制
char *new = (char *)p;

我解除它的分配:

代码语言:javascript
复制
free(new);

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-20 19:11:08

当您调用malloc (或它的兄弟之一)时,内存分配的大小会将其存储为“关于此分配的信息”(info_block)的一部分。malloc不知道你是否传入了sizeof(int),常量4sizeof(short)*2,或者你给它的其他任何东西[实际上,它很可能将分配扩展到,比如说,16个字节-这个大小被存储为分配的一部分。

当您稍后调用free时,它将“找到”info_block,然后它知道要释放的大小。所以,不管是什么类型转换,或者你对指针做的其他操作-只要里面的指针是相同的值就行。

票数 1
EN

Stack Overflow用户

发布于 2013-02-20 18:45:54

在您的特定情况下,答案取决于底层架构。假设32位机器,指针的大小始终是4字节。如果你使用它,它可能会变得很麻烦。

代码语言:javascript
复制
int *p = (int *) malloc(sizeof(char));

但我相信你会得到警告的。

所以在你的例子中,被分配的是4个字节。

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

代码语言:javascript
复制
int *p = malloc(sizeof(int));

完全没问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14977755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档