【问题标题】:What is the range of pointer memory in CC中指针内存的范围是多少
【发布时间】:2017-06-22 05:21:32
【问题描述】:

一个指针可以分配多少个值/空间。有没有办法找到可能的分配总数。

【问题讨论】:

  • 原则上,一个对象的对象表示中的两个char 指针之间的差异必须可以由ptrdiff_t 表示,这样就可以为您提供一个上限。但这可能不是现代系统的现实界限。
  • 你问的是单个变量能容纳多少内存?或者一般有多少内存可用?
  • 是的,因为它取决于配置。有没有办法计算出来。
  • @KerrekSB 在不在同一个数组中的两个对象之间生成ptrdiff_t 是未定义行为的一个示例。
  • 从 C 语言的角度来看,这是未指定的。

标签: c pointers


【解决方案1】:

据我所知,只有 NULL 值(“零”,但不一定全为零)在 C 中保留,因此指针类型的其余数字空间值都是有效的指针地址就 C 语言而言,但在特定平台上会应用许多额外的规则,这将减少可用的内存空间(例如内存映射 IO)。

(请注意,我假设您说的是平坦的内存空间,就像我们在真正的 32 位编程中所使用的那样,而不是像 16 位编程的日子那样,您有 nearfar 指针和各种内存黑客)。

在我的“特定平台”注释上扩展,在 32 位 Windows the user-process address space is 2 GiB0x0000000x7FFFFFFF)而不是 4GiB 上,因为 Windows 中 32 位指针的高位是保留的(除非您指定IMAGE_FILE_LARGE_ADDRESS_AWARE 标志)。

至于分配的总数:(例如,您可以分配多少次单字节缓冲区)然后取决于分配器的实现 - 以及父操作系统,因为每次分配都有空间开销(有有许多不同的方式来实现分配器,具有不同的结构和算法),所以我不能做出一般性的陈述。

【讨论】:

  • 其他需要注意的细节是任何非字符类型(甚至某些字符类型)的填充和对齐要求。
猜你喜欢
  • 2021-09-17
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2015-09-30
  • 2022-01-25
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多