我有一個關於共享內存和分段錯誤的問題。 我認爲可以使用大容量的內存。 當我檢查Shmmax時,我發現可以分配巨大的內存。如何使特定數組大小的共享內存?
下數據是$結果IPCS -lm
------共享內存限制--------段
最大數量= 4096
最大SEG大小(字節)= 18014398509465599
最大總共享存儲器(千字節)= 18014398442373116
分鐘SEG大小(字節)= 1
#include <stdio.h>
#include <sys/shm.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#define ARRAY_SIZE 40000000
int main(int argc, char *argv[]){
int shmid;
void *shared_memory = (void *)0;
shmid = shmget((key_t)1234, sizeof(float), IPC_CREAT|0666);
if (shmid == -1)
{
perror("shmget failed : ");
exit(0);
}
shared_memory = (float *)shmat(shmid, NULL, 0);
if (shared_memory == (void *)-1)
{
perror("shmat failed : ");
exit(0);
}
static float *testx;
testx = (float *)shared_memory;
int k = 0;
for(k;k<400;k++){
testx[k] = 1.12;
}
for(k;k<40000000;k++){
testx[k] = 1.12;
}
}
程序可以循環具有規模的少量運行第一
的問題,然而,這是第二個循環與40000000大小
我應該怎麼修改才能運行此代碼的任何建議?
您正在爲1浮點分配空間,但正在嘗試寫入40,000,000浮點數。 –
要獲得共享內存段,請考慮在系統具有共享內存段時使用'shm_open','truncate'和'mmap'。這些設置起來要容易得多。 –
歡迎來到堆棧溢出。 請注意,在這裏說'謝謝'的首選方式是通過 提高投票的好問題和有用的答案(一旦你有足夠的聲譽這樣做),並接受任何 問題最有用的答案,你問(這也給你一個小小的提升,以你的聲望 )。 請參閱[關於]頁面,以及[如何在此處提問 ?]和 [當有人回答我的 問題時,我該怎麼辦? ?](http://stackoverflow.com/help/someone-answers) –