【发布时间】:2012-03-12 04:20:11
【问题描述】:
我尝试使用 Boost 并在分配 3000 次大小为 24 的对象后获得了 segv,现在我开始使用 sys/ipc.h 和 sys/shm.h ,我分配了 25 个 mio 字节(如果我理解正确的话)
它似乎在我的 linux 机器上也能正常工作 ipcs -m 将显示分配的段
0x000081bc 917516 testUser 644 25000000 0
sysctl -p 将打印
kernel.shmmax = 25500000
由于某种原因,它一直有效,直到程序达到“43406 x 24 字节”,这就是它将进行 segv 的地方。我很高兴能得到一些提示我的问题所在。另请注意,如果这是为对象分配和使用共享内存的错误方式。
#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);
}
【问题讨论】:
-
只是出于好奇,
setTest电话是什么?是不是和Boost有关?
标签: c++ shared-memory segmentation-fault ipcs