Boost を使用しようとしましたが、サイズ 24 のオブジェクトを 3000 回割り当てた後、segv がありました。今は sys/ipc.h と sys/shm.h を使い始めました。25 ミリオ バイトを割り当てます (これを適切に理解している場合)。
私の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);
}