当前位置: 技术问答>linux和unix
进程的内存空间限制
来源: 互联网 发布时间:2016-06-08
本文导语: 在UNIX系统中,每个进程所能拥有的内存空间是不是有个限制的? 比如说,我在C下面用calloc分配一个逐步分配一个很大的内存,比如说1G,有时候能成功,有时候不能成功。 如何才能知道这个内存最大值是多少呢? ...
在UNIX系统中,每个进程所能拥有的内存空间是不是有个限制的?
比如说,我在C下面用calloc分配一个逐步分配一个很大的内存,比如说1G,有时候能成功,有时候不能成功。
如何才能知道这个内存最大值是多少呢?
谢谢了。
比如说,我在C下面用calloc分配一个逐步分配一个很大的内存,比如说1G,有时候能成功,有时候不能成功。
如何才能知道这个内存最大值是多少呢?
谢谢了。
|
前两天看一段代码的时候发现的函数,当时查的资料,希望能帮上楼主。
每一个进程都有自己的一组资源限制,在(*)inux系统中我们可以通过
#include
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
这2个API来取得和设置资源
getrlimit用来取得setrlimit用来设置 这二个参数都需要一个要控制的资源 比如控制CPU、内存、文件描述符个数等等的控制,作为第一个参数传入,第二个参数是一个rlimit的结构体地址(指针),他的结构如下定义:
定义放在头文件/usr/include/bits/resource.h中
struct rlimit
{
/* The current (soft) limit. */
rlim_t rlim_cur;
/* The hard limit. */
rlim_t rlim_max;
};
结构体中 rlim_cur是要取得或设置的资源软限制的值,rlim_max是硬限制
这两个值的设置有一个小的约束:
1) 任何进程可以将软限制改为小于或等于硬限制
2) 任何进程都可以将硬限制降低,但普通用户降低了就无法提高,该值必须等于或大于软限制
3) 只有超级用户可以提高硬限制
一个无限的限制由常量RLIM_INFINITY指定(The value RLIM_INFINITY denotes no limit on a resource )
小试牛刀(代码只是演示,并没有作错误处理)
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
struct rlimit r;
if(getrlimit(RLIMIT_NOFILE,&r)
每一个进程都有自己的一组资源限制,在(*)inux系统中我们可以通过
#include
int getrlimit(int resource, struct rlimit *rlim);
int setrlimit(int resource, const struct rlimit *rlim);
这2个API来取得和设置资源
getrlimit用来取得setrlimit用来设置 这二个参数都需要一个要控制的资源 比如控制CPU、内存、文件描述符个数等等的控制,作为第一个参数传入,第二个参数是一个rlimit的结构体地址(指针),他的结构如下定义:
定义放在头文件/usr/include/bits/resource.h中
struct rlimit
{
/* The current (soft) limit. */
rlim_t rlim_cur;
/* The hard limit. */
rlim_t rlim_max;
};
结构体中 rlim_cur是要取得或设置的资源软限制的值,rlim_max是硬限制
这两个值的设置有一个小的约束:
1) 任何进程可以将软限制改为小于或等于硬限制
2) 任何进程都可以将硬限制降低,但普通用户降低了就无法提高,该值必须等于或大于软限制
3) 只有超级用户可以提高硬限制
一个无限的限制由常量RLIM_INFINITY指定(The value RLIM_INFINITY denotes no limit on a resource )
小试牛刀(代码只是演示,并没有作错误处理)
#include
#include
#include
#include
#include
#include
#include
int main(void)
{
struct rlimit r;
if(getrlimit(RLIMIT_NOFILE,&r)