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通常不是从数组中分配的,但可以重载新运算符以更改分配行为.它可能是从一个数组(在你的例子中是一个大的)中专门分配的,这样分配的行为就像你期望的那样,在某些应用程序中,这是控制内存和提高性能的特定策略(尽管细节通常更多)复杂而不是简单的插图).
总结以上是内存溢出为你收集整理的C分配的字节数多于询问的字节数?全部内容,希望文章能够帮你解决C分配的字节数多于询问的字节数?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)