c - 什么决定了可以分配多少内存?

标签 c memory-management size-t

这是 my previous question 的后续行动关于为什么需要 size_t。

鉴于 size_t 保证足够大以表示您可以分配的内存块的最大大小(意味着仍然可以有一些大于 size_t 的整数),我的问题是......

什么决定了一次可以分配多少?

最佳答案

您机器的体系结构、操作系统(但两者交织在一起)和您的编译器/库集决定了您可以一次分配多少内存。

malloc 并不需要能够使用操作系统可以给他的所有内存。操作系统不需要使机器中存在的所有内存可用(例如,各种版本的 Windows Server 具有不同的最大内存 for licensing reasons )

但请注意,操作系统可以提供比机器中存在的内存更多的内存,甚至比主板允许的内存更多的内存(假设主板有一个内存插槽,只接受 1gb 的内存棒,Windows 仍然可以让程序分配 2gb 的内存)。这是通过使用虚拟内存、分页(你知道的,交换文件,你的老 friend 和缓慢的 friend :-) 或者,例如,通过使用 NUMA 来完成的。 .

关于c - 什么决定了可以分配多少内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850482/

相关文章:

c - 嵌套结构填充 - C - 64 位 - linux

c# - 在运行时轮询 C# 应用程序的内存使用情况?

关于未引用变量的 JavaScript 闭包

C: 将 int 转换为 size_t

c - 为什么终端显示 "invalid operands to binary expression"? C

c - 我的 C 代码有问题,但我看不到错误。这是一个简单的程序

c - 如何仅使用标准库分配对齐的内存?

c - size_t 的正确定义是什么?

objective-c - 何时使用 size_t 与 uint32_t?

c - 为什么在写入使用字符串初始化的 "char *s"时会出现段错误,而不是 "char s[]"?