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

发布于 2024-12-11 08:37:29 字数 192 浏览 0 评论 0原文

这是我之前的问题关于为什么 size_t 是必要的的后续问题。

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

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

This is a follow-up to my previous question about why size_t is necessary.

Given that size_t is guaranteed to be big enough to represent the largest size of a block of memory you can allocate (meaning there can still be some integers bigger than size_t), my question is...

What determines how much you can allocate at once?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅笑轻吟梦一曲 2024-12-18 08:37:29

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

malloc 并不需要能够使用操作系统可以提供给他的所有内存。操作系统不需要需要提供计算机中存在的所有内存(例如,不同版本的 Windows Server 具有不同的最大内存出于许可原因

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

The architecture of your machine, the operating system (but the two are intertwined) and your compiler/set of libraries determines how much memory you can allocate at once.

malloc doesn't need to be able to use all the memory the OS could give him. The OS doesn't need to make available all the memory present in the machine (and various versions of Windows Server for example have different maximum memory for licensing reasons)

But note that the OS can make available more memory than the one present in the machine, and even more memory than the one permitted by the motherboard (let's say the motherboard has a single memory slot that accepts only 1gb memory stick, Windows could still let a program allocate 2gb of memory). This is done throught the use of Virtual Memory, Paging (you know, the swap file, your old and slow friend :-) Or, for example, through the use of NUMA.

流年里的时光 2024-12-18 08:37:29

在实际代码中,我可以想到三个约束:

  • 能够分配的最大 unsigned int size_t 。 size_t 应该与操作系统的内存分配机制使用相同的类型(相同的大小等)。
  • 操作系统能够在 RAM 中处理的最大块(块的大小如何表示?这种表示如何影响最大块大小?)。
  • 内存碎片(最大空闲块)和总可用空闲 RAM。

I can think of three constraints, in actual code:

  • The biggest unsigned int size_t is able to allocate. size_t should be the same type (same size, etc.) the OS' memory allocation mechanism is using.
  • The biggest block the operating system is able to handle in RAM (how are block's size represented? how this representation affects the maximum block size?).
  • Memory fragmentation (largest free block) and the total available free RAM.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文