为什么运行时堆用于C风格语言中的动态内存分配,数据结构都称为"堆"?有一些关系吗?
我试图找到免费商店通常被称为堆的官方(或足够好)的原因.
除了它从数据段的末尾增长之外,我无法想到一个很好的理由,特别是因为它与堆数据结构几乎没有关系.
注意:很多人都提到它只是一大堆没有组织的东西.但对我来说,术语堆物理意味着一堆物理依赖于彼此的东西.你从下面拉出一个,其他一切都在它上面坍塌,等等.换句话说,对我来说,堆松的声音组织起来很糟糕(例如,最新的东西在上面).这并不是一个堆在大多数计算机上实际工作的方式,但如果你把东西放在堆的开头然后增长它我想它可以工作.
分配给new运算符的内存与通过简单变量声明分配的内存之间有哪些技术差异,例如int var?c ++是否有任何形式的自动内存管理?
特别是,我有几个问题.首先,由于使用动态内存,您必须声明一个指针来存储您使用的实际内存的地址,动态内存不会使用更多内存吗?除非你声明一个数组,否则我不明白为什么指针是必要的.
其次,如果我要做一个像这样的简单函数:
Run Code Online (Sandbox Code Playgroud)int myfunc() { int x = 2; int y = 3; return x+y; }
...并且调用它,一旦它的存在范围结束,函数分配的内存是否会被释放?动态记忆怎么样?
当您使用指针在堆上分配动态内存时,
char *buffer_heap = new char[15];
Run Code Online (Sandbox Code Playgroud)
它将在内存中表示为:
ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍýýýý««««««««þþþ
Run Code Online (Sandbox Code Playgroud)
为什么最后没有一个NULL终止字符而不是««««««««þþþ?
如果int m[1000000];在C/C++的main函数内部编写,它将在堆栈溢出时收到运行时错误.相反,如果你vector<int> m;在那里写,然后push_back 1000000元素,它将运行正常.
我很好奇为什么会这样.他们都是本地记忆,不是吗?提前致谢.