在UNIX上分配给C程序的初始堆大小
通常分配给在基于UNIX的操作系统上运行的C程序的初始堆大小是多少?
它是如何由g编译器决定的,它是否在这方面发挥作用? 解决方法
对于C,无论平台是什么,通过根据需要向操作系统请求更多内存,堆几乎总是动态扩展.在某些嵌入式平台或某些非常旧的平台上,这可能不是真的,但是由于环境的性质,您可能非常清楚您拥有多少堆.
在Unix平台上,这是双重的.甚至大多数Unix嵌入式平台都以这种方式工 在这样工作的平台上,库通常没有任何内部限制,而是依赖操作系统告诉它它不能再有内存.实际上,由于各种原因,您实际上要求的内存多于可用内存,因此可能会发生这种情况. 在大多数Unix系统上,进程可以拥有的总内存有一个硬限制.可以使用getrlimit系统调用查询此限制.相关常数是RLIMIT_AS.此限制控制可分配给进程的最大内存页数,并直接限制可用的堆空间量. 不幸的是,这个限制没有直接说明你可以使用多少堆.内存页面由于mmap调用而分配给进程,用于保存程序代码本身以及进程堆栈. 此外,如果将物理内存和交换空间加在一起,则此限制通常会远远超过整个系统可用的总内存.所以实际上,在达到此限制之前,程序将经常耗尽内存. 最后,某些版本的Unix过度分配页面.它们允许您分配大量页面,但实际上只有在您写入页面时才能找到这些页面的内存.这意味着即使所有内存分配调用都成功,您的程序也可能因内存不足而被终止.其基本原理是能够分配只能部分使用的巨大数组. 因此,简而言之,没有一个典型的尺寸,也没有好的方法来找出它的大小. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |