加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C分配的字节数多于询问的字节数?

发布时间:2020-12-16 09:59:27 所属栏目:百科 来源:网络整理
导读:int main(int argc,const char* argv[]){ for(unsigned int i = 0; i 10000000; i++) char *c = new char; cin.get();} 在上面的代码中,为什么我的程序使用471MB内存而不是10MB,正如人们所期望的那样? 解决方法 RAM的分配来自运行时库和操作系统的共同努力.
int main(int argc,const char* argv[])
{
    for(unsigned int i = 0; i < 10000000; i++)
        char *c = new char;

    cin.get();
}

在上面的代码中,为什么我的程序使用471MB内存而不是10MB,正如人们所期望的那样?

解决方法

RAM的分配来自运行时库和操作系统的共同努力.为了识别示例代码请求的一个字节,有一些结构可以向运行时标识这个内存.它有时是双链表,但它由操作系统和运行时实现定义.

您可以通过这种方式进行类比:如果您有一个链表容器,您感兴趣的只是您放置在每个链接中的内容,但容器必须指向容器中的其他链接以便维护链表.

如果使用调试器或其他一些调试工具来跟踪内存,这些结构可能会更大,从而使每个分配成本更高.

RAM通常不是从数组中分配的,但可以重载新运算符以更改分配行为.它可能是从一个数组(在你的例子中是一个大的)中专门分配的,这样分配的行为就像你期望的那样,在某些应用程序中,这是控制内存和提高性能的特定策略(尽管细节通常更多)复杂而不是简单的插图).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读