시스템 호출로 수행되고 구조체 *에 메모리를 할당해야하는 연습을 완료하려고합니다. 내 코드는 다음과 같습니다 명확히하기 위해malloc() 대신 mmap() 사용
myStruct * entry = (myStruct *)mmap(0, SIZEOF(myStruct), PROT_READ|PROT_WRITE,
MAP_ANONYMOUS, -1, 0);
, 내가 malloc()
을 사용할 수 있지만 mmap()
를 사용할 수 있습니다. Netbeans의 Windows에서이 문제가 발생하지 않았지만, 현재 우분투의 명령 줄에서 컴파일 및 실행 중이므로 액세스 할 때마다 "Segmentation Fault"가 발생합니다.
하나가 아닌 다른 시스템에서 작동하는 이유가 있습니까? mmap()
이 방법으로 메모리를 할당하는 올바른 방법은 무엇입니까? 내 걱정은 각 mmap()
콜에 대해 큰 메모리 덩어리를 할당하려고했기 때문에 지금은 실행할 수 없습니다.
또한 오류가 내 mmap은 22 - 잘못된 인수입니다 (위의 코드에서 오류 검사를 수행하지 않도록 질문을 작성하는 동안 문제가 발생했습니다). 주소가 0이고 사용자 정의 SIZEOF()
함수가 다른 mmap 인수에서 작동하는 경우 MAP_ANONYMOUS
을 사용하므로 fd
및 offset
매개 변수는 각각 -1과 0이어야합니다.
PROT_READ|PROT_WRITE
섹션에 문제가 있습니까?
'4096'이나'8192' 또는'SIZEOF (myStruct)'대신에 2의 다른 힘을 사용한다면, 그것은 자연스러운 추측일까요? –
나는 그 오류가 당신의'SIZEOF()'에 있다고 생각한다.'MAP PRIVATE'를 추가해야합니다. –
'SIZEOF()'가 정확하지 않습니다. 실제 아이템의 철자는'sizeof()'I.E.입니다. 모두 소문자. – user3629249