공부 중 메모/C,C++-기타 정보

동적할당의 한계치.

라이피 (Lypi) 2018. 6. 8. 20:39
반응형

32Bit OS에서의 동적영역의 한계치는 4Giga-1Byte라고 한다. (1Byte는 항상 커널이 잡고 있다고 한다.)

그렇다면 64Bit에서는 8Giga-1Byte일 것 같은데, 아니다. 똑같이 4Giga-1Byte이다.

64Bit OS와 32Bit OS의 호환성을 위해서 늘리지 않은것일까?

따로 더 쓸 수 있게 설정하는 방법이 있다고 하는 것도 같던데 아직 정확한 정보를 찾지 못했다.



4294967295byte = 4Giga-1Byte.

아래의 코드에서 더 할당하려고 하면 뻑이난다.

#include <stdio.h>
#include <stdlib.h>

int main()
{
	unsigned long int num;
	scanf_s("%u", &num);

	void* p = (void*)malloc(num+4294967295);
	//_msize(p)는 힙메모리의 크기를 확인할 때 쓰는 함수
	
	size_t MaxMemory = _msize(p);
	printf("최대 크기는 %zd Byte", MaxMemory);
}


#include <stdio.h>
#include <stdlib.h>

int main()
{
	const unsigned long int MaxMemory = 4294967295;

	const unsigned long int Giga = (MaxMemory / 1024 / 1024 / 1024);
	const unsigned long int Mega = (MaxMemory / 1024 / 1024) % 1024;
	const unsigned long int kilo = (MaxMemory / 1024) %1024;
	const unsigned long int byte = (MaxMemory % 1024);

	printf("%dGiga %dMega %dKilo %ddByte", Giga, Mega, kilo, byte);
}


반응형