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

在UNIX上分配给C程序的初始堆大小

发布时间:2020-12-15 22:05:00 所属栏目:安全 来源:网络整理
导读:通常分配给在基于UNIX的操作系统上运行的C程序的初始堆大小是多少? 它是如何由g编译器决定的,它是否在这方面发挥作用? 解决方法 对于C,无论平台是什么,通过根据需要向操作系统请求更多内存,堆几乎总是动态扩展.在某些嵌入式平台或某些非常旧的平台上,这可
通常分配给在基于UNIX的操作系统上运行的C程序的初始堆大小是多少?

它是如何由g编译器决定的,它是否在这方面发挥作用?

解决方法

对于C,无论平台是什么,通过根据需要向操作系统请求更多内存,堆几乎总是动态扩展.在某些嵌入式平台或某些非常旧的平台上,这可能不是真的,但是由于环境的性质,您可能非常清楚您拥有多少堆.

在Unix平台上,这是双重的.甚至大多数Unix嵌入式平台都以这种方式工

在这样工作的平台上,库通常没有任何内部限制,而是依赖操作系统告诉它它不能再有内存.实际上,由于各种原因,您实际上要求的内存多于可用内存,因此可能会发生这种情况.

在大多数Unix系统上,进程可以拥有的总内存有一个硬限制.可以使用getrlimit系统调用查询此限制.相关常数是RLIMIT_AS.此限制控制可分配给进程的最大内存页数,并直接限制可用的堆空间量.

不幸的是,这个限制没有直接说明你可以使用多少堆.内存页面由于mmap调用而分配给进程,用于保存程序代码本身以及进程堆栈.

此外,如果将物理内存和交换空间加在一起,则此限制通常会远远超过整个系统可用的总内存.所以实际上,在达到此限制之前,程序将经常耗尽内存.

最后,某些版本的Unix过度分配页面.它们允许您分配大量页面,但实际上只有在您写入页面时才能找到这些页面的内存.这意味着即使所有内存分配调用都成功,您的程序也可能因内存不足而被终止.其基本原理是能够分配只能部分使用的巨大数组.

因此,简而言之,没有一个典型的尺寸,也没有好的方法来找出它的大小.

(编辑:李大同)

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

    推荐文章
      热点阅读