반응형
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); }
반응형