我在macOS x64(8G物理記憶體)上測試了一下,malloc應該是如上說的分配了虛擬記憶體,而作業系統並沒有分配物理空間。
理論上來說,每個應用程式都應該有2^64bit(大約17179869184.0Gbit)的虛擬記憶體空間。
我一次性new分配了50000G竟然成功了,不是多次分配。
測試用例,
輸出結果,
a.out(44968,0x7fff9f4dc380) malloc: *** mach_vm_map(size=536870912000000) failed (error code=3)
*** error: can"t allocate region
*** set a breakpoint in malloc_error_break to debug
libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
Abort trap: 6
我在macOS x64(8G物理記憶體)上測試了一下,malloc應該是如上說的分配了虛擬記憶體,而作業系統並沒有分配物理空間。
理論上來說,每個應用程式都應該有2^64bit(大約17179869184.0Gbit)的虛擬記憶體空間。
我一次性new分配了50000G竟然成功了,不是多次分配。
測試用例,
輸出結果,
我發現new的引數是size_t也就是unsigned long,當我嘗試著分配更大(擴大10倍,50000*10G)的虛擬記憶體的時候,出錯了。a.out(44968,0x7fff9f4dc380) malloc: *** mach_vm_map(size=536870912000000) failed (error code=3)
*** error: can"t allocate region
*** set a breakpoint in malloc_error_break to debug
libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc
Abort trap: 6