Я пытался использовать Boost и имел segv после 3000 выделений объектов размером 24, теперь я начал использовать 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);
}
setTest
звонок? Это что-то связанное с Boost? - person Mark Wilkins   schedule 22.02.2012