나는 malloc
전화로 이상한 문제에 직면하고있다. 나는 거대한 배열 (GB 단위의 크기)을 사용하는 프로그램에서 일하고 있는데, 배열에 대한 메모리를 할당하려고 할 때 malloc
찾을 수 있는데, malloc
은 내 RAM (64GB)보다 큰 크기를 할당 할 때도 성공합니다. . 아래왜 RAM보다 큰 배열을 할당 할 수 있습니까?
참조 코드 :
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define Sixteen_G 16000000000
int main() {
int *c = (int *)malloc(sizeof(int)*Sixteen_G);
int *d = (int *)malloc(sizeof(int)*Sixteen_G);
int *e = (int *)malloc(sizeof(int)*Sixteen_G);
int *f = (int *)malloc(sizeof(int)*Sixteen_G);
int *g = (int *)malloc(sizeof(int)*Sixteen_G);
if(c == NULL)
printf("c Allocation failed\n");
if(d == NULL)
printf("d Allocation failed\n");
if(e == NULL)
printf("e Allocation failed\n");
if(f == NULL)
printf("e Allocation failed\n");
if(g == NULL)
printf("e Allocation failed\n");
else
printf("All arrays allocated\n");
return 0;
}
위의 코드의 출력은 다음과 같습니다
All arrays allocated
또한 크기 >= 17GB
의 malloc
단일 호출은 실패하지만, 16GB
를 여러 번 호출이 전달된다. malloc에 내 시스템의 RAM 크기가 단지 64기가바이트 때, 그 많은 메모리를 할당 할 수있는 이유
누군가는 설명 할 수, 또한 단일/다중 통화
'else'는'if (g == NULL)'검사에만 속하고 다른 검사에는 속하지 않습니다. –
시스템에서 특정 malloc 구현이 어떤 시스템인지 알려주는 사람이있을 수 있습니다. C 언어 사양은 그 자체로 문제를 말하지 않습니다. –
문제에 관해서는 RAM 크기가 64GB이지만 실제 크기 * 메모리 크기 또는 가상 메모리 크기라고 말합니까? –