首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >共享内存段

共享内存段
EN

Stack Overflow用户
提问于 2012-02-22 04:26:00
回答 1查看 137关注 0票数 1

我曾尝试使用Boost,并在分配了3000个大小为24的对象后有了一个segv,现在我开始使用sys/ipc.h和sys/shm.h,我分配了25mio字节(如果我理解正确的话)

它似乎也可以在我的linux box ipc上正常工作,-m将显示分配的段

代码语言:javascript
复制
0x000081bc 917516     testUser 644        25000000   0

将打印sysctl -p

代码语言:javascript
复制
kernel.shmmax = 25500000

由于某些原因,它会一直工作到程序达到"43406 x 24字节“,这就是它要分段的地方。我很高兴能得到一些我的问题所在的提示。还请注意,这是否是分配和使用对象的共享内存的错误方式。

代码语言:javascript
复制
#define MAXMYMEM 25000000
int sharedMemId;
x *p_sharedMemory;
x *p_other;
sharedMemId = shmget(2232, MAXMYMEM, IPC_CREAT | 0644);

if(sharedMemId >= 0){

    p_sharedMemory = (x*) shmat( sharedMemId, 0 , 0);

    if(p_sharedMemory != ( x *)-1) {

        cout << sizeof(x) << endl;

        for(unsigned int i = 0 ; i < 1000000;i++ ){



            (p_sharedMemory + (sizeof(x) * i))->setTest(i);

        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-22 04:34:19

(p_sharedMemory + (sizeof(x) * i))->setTest(i);

你为什么要在这里使用sizeof(x)?指向x的指针加1将指向下一个x,而不是下一个字节。我怀疑这就是你的问题。

(p_sharedMemory + (sizeof(x) * i))->setTest(i);更改为

代码语言:javascript
复制
++p_sharedMemory;
p_sharedMemory->setTest(i);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9384628

复制
相关文章

相似问题

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