c - 一次可以分配多少数据? Linux 等现代操作系统的限制是什么?

标签 c linux malloc

可以分配多少数据,限制是如何确定的?我正在用 C 编写一个算法,它基本上重复使用存储在数组中的一些数据。我的想法是将其保存在动态分配的数组中,但我不确定是否可以分配这样的数量。

我使用 200 个大小为 2046 的数组,每个数组包含大小为 8 字节的复杂数据。我在整个过程中都使用这些,所以我不想一遍又一遍地计算它。

您对这种方法的可行性有何看法?

谢谢 和平号

最佳答案

malloc() 可以分配多少内存取决于:

  • 你的程序可以直接寻址多少内存
  • 有多少物理内存可用
  • 有多少交换空间可用

在现代的平面内存模型 32 位系统上,您的程序可以寻址 4 GB,但部分地址空间(通常为 2 GB,有时为 1 GB)是为内核保留的。因此,根据经验,假设您有物理内存和交换空间来备份它,您应该能够一次分配近 2 GB 的内存。

在 64 位系统上,运行 64 位操作系统和 64 位程序,您的可寻址内存基本上是无限的。

200 个 2048 字节的数组每个只有 400k,这应该适合缓存(即使在智能手机上)。

关于c - 一次可以分配多少数据? Linux 等现代操作系统的限制是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3959874/

相关文章:

Coldfire 强制使用 RAM 而不是寄存器

mysql - 使用外部文件选择性地加载数据 INFILE

c - "Pointer being freed was not allocated"发生在 mac 但不是在 windows 7

c - C++ 中的监视器 - Linux

c - 使用 calloc 分配的免费二维数组

c++ - malloc 和 snprintf 总线核心转储

c++ - C: main 没有找到,但它在那里 |编译错误

c - 线程工作不当

c++ - 编译时断言数据类型大小

c - 调用shell脚本后返回主C程序