首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IPC SysV共享内存- shmget(),shmat()不工作

IPC SysV共享内存- shmget(),shmat()不工作
EN

Stack Overflow用户
提问于 2017-12-04 15:04:45
回答 1查看 452关注 0票数 0
代码语言:javascript
复制
cat /proc/sys/kernel/shmmax 
18446744073692774399

试图创建shmem内存,然后覆盖它,消除巨大的脏牛漏洞。

不知何故,MAXMYMEM的分配显示了一个错误“不能分配内存”,错误代码12。

为什么不起作用?

allocate.c

代码语言:javascript
复制
#include <sys/ipc.h>
#include <sys/shm.h>
#include <errno.h>
#include <string.h>

#define MAXMYMEM 0x200000 

int main(int argc, char **argv)
{
int shID;
char *myPtr;
int i;

    shID = shmget(2409, MAXMYMEM, IPC_CREAT | SHM_HUGETLB | 0666 );
    if (shID >= 0) {
        myPtr = shmat(shID, 0, 0);
        if (myPtr==(char *)-1) {
            perror("shmat");
        } else {
            for (i=0; i<MAXMYMEM; i++) {
                myPtr[i] = 'A'+i;
            }
            getchar();
            shmdt(myPtr);
        }
    } else {
        perror("shmget");
    }
}

更新1:

代码语言:javascript
复制
grep -i huge /proc/meminfo
AnonHugePages:   1714176 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB

更新2:

代码语言:javascript
复制
$cat /proc/sys/vm/hugetlb_shm_group
0
$uname -a
Linux 4.4.0-101-generic #124-Ubuntu SMP Fri Nov 10 18:29:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-11 19:51:55

原因是在Ubuntu16.04上,巨大页面的数量被设置为0。

代码语言:javascript
复制
$sysctl vm.nr_hugepages
vm.nr_hugepages = 0

通过将其更改为不同的值,程序工作起来了!

代码语言:javascript
复制
$sysctl -w vm.nr_hugepages=512
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47636237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档