공유 메모리 및 세그먼트 오류에 대한 질문이 있습니다. 거대한 크기의 메모리를 사용하는 것이 좋을 것이라고 생각했습니다. Shmmax를 선택했을 때, 나는 거대한 메모리가 할당 될 수 있음을 발견했다. 데이터에서특정 배열 크기로 공유 메모리를 만드는 방법은 무엇입니까?
는 $의 결과 IPCS -lm
------ 공유 메모리 제한 -------- 세그먼트
최대 수 = 4096
최대 SEG 크기 (킬로바이트) = 18,014,398,509,465,599
최대 총 공유 메모리 (킬로바이트) = 18,014,398,442,373,116
분 SEG 크기 (바이트) = 1
,451,515,#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;
}
}
크기의 작은 금액을 가지고 루프의 첫 번째를 실행할 수있는 프로그램은
문제, 그러나입니다 40,000,000 크기
내가이 코드를 실행하기 위해 수정해야하는지 어떤 제안에 두 번째 루프 ?
1 플로트의 공간을 할당했지만 40,000,000 개의 플로트에 쓰려고합니다. –
공유 메모리 세그먼트를 얻으려면 시스템에있는 경우'shm_open','truncate' 및'mmap'을 사용하십시오. 이것들은 설정하는 것이 훨씬 쉽습니다. –
스택 오버플로에 오신 것을 환영합니다. 여기서 '감사합니다'라고 말하면 가장 좋은 방법은 위의 좋은 질문과 유용한 답변 (충분한 답변을 얻으려면 명을 얻은 것임)이며, 질문에 대한 가장 유용한 답변을 수락하면됩니다. (이는 또한 평판에 대한 귀하의 에 약간의 도움이됩니다). [정보] 페이지 및 [질문은 어떻게합니까? 여기에 있습니까?] (http://stackoverflow.com/help/how-to-ask) 및 [내 질문에 대한 대답은 무엇을해야합니까? ?] (http://stackoverflow.com/help/someone-answers) –