Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5760611
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: LINUX

2008-11-04 18:02:33

今天同事问了这个问题,共享内存最多只能设成1G?之前只记得可以通过/proc/sys/kernel/shmmax来进行修改,但是最大是多少,倒是没有进行深究。

1G的来由主要来自man proc:
/proc/sys/kernel/shmmax
This  file  can  be  used to query and set the run time limit on the maximum (System V IPC) shared memory segment size that can be created. Shared memory segments up to 1GB are now supported in the kernel.  This value defaults to SHMMAX.

/proc/sys/kernel/shmall
以页为单位的共享内存的大小。
/proc/sys/kernel/shmmax
以字节为单位的共享内存的大小。

测试程序:
#include
#include
#include
#include
#include

#define SHM_SIZE (1024*1024*1024+256*1024*1024)
#define SHM_MODE 0600

int main()
{
    int shmid = 0;
    char *shmptr = NULL;

    shmid = shmget(IPC_PRIVATE, SHM_SIZE, SHM_MODE);
    if(shmid<0)
    {
        perror("shmget");
        exit(1);
    }

    shmptr = shmat( shmid, 0, 0);
    if(shmptr==(void *)-1)
    {
        perror("shmat");
        exit(1);
    }

    printf("shm(%u) from 0x%x to 0x%x.\n", SHM_SIZE, shmptr, shmptr+SHM_SIZE);

    memset(shmptr, 0x41, SHM_SIZE); //'A'

    getchar();

    memset(shmptr, 0, SHM_SIZE); //0

    if( shmctl(shmid, IPC_RMID, 0) < 0)
    {
        perror("shmctl");
        exit(1);
    }

    return 0;
}

我的机器内存2G,分配1G+256M共享内存没有问题,共享内存最多1G不攻自破!

不要太相信manual了;-)

阅读(1728) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2008-11-05 15:12:59

感谢楼主

chinaunix网友2008-11-05 15:12:59

感谢楼主