Question

J'ai essayé d'utiliser Boost et j'ai eu un SEGV après 3000 allocations d'objets de taille 24, maintenant j'ai commencé à utiliser SYS / IPC.H et SYS / SHM.H, j'alloue 25 octets Mio (si je comprends bien)

Il semble également fonctionner correctement sur ma boîte Linux IPCS -M affichera le segment alloué

0x000081bc 917516     testUser 644        25000000   0

sysctl -p imprimera

kernel.shmmax = 25500000

Pour une raison quelconque, cela fonctionne jusqu'à ce que le programme atteigne "43406 x 24 octets" C'est l'endroit où il sera. Je serais heureux d'obtenir des indices où réside mon problème. Veuillez également noter si c'est la mauvaise façon d'allouer et d'utiliser la mémoire partagée avec des objets.

#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);

        }
Était-ce utile?

La solution

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

Pourquoi utilisez-vous sizeof(x) ici? L'ajout d'un pointeur qui pointe vers un X pointera au prochain x, pas l'octet suivant. Je soupçonne que c'est votre problème.

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

++p_sharedMemory;
p_sharedMemory->setTest(i);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top