【问题标题】:What is the maximum size of the variable pointed by pointer which can be passed in a c function?可以在 c 函数中传递的指针指向的变量的最大大小是多少?
【发布时间】:2016-04-28 16:13:29
【问题描述】:

可以通过指针传递给函数的变量(结构)的大小是否有限制。还有可以定义变量的大小(结构中的结构等等......并且有数组)尺寸从 100-500 不等) 为了程序的安全运行。(没有堆栈溢出,内存问题,指针损坏) 这是针对内存限制在 64K 到 512K 的嵌入式系统

【问题讨论】:

  • 别人怎么可能回答这个问题?您必须检查系统的容量和配置。
  • 指针是一个内存地址,它本身是固定大小的(如 16 位或 32 位或 64 位)。它不依赖于它指向的数据的大小(如果这甚至是有意义的事情,例如循环列表的大小是多少?)。
  • 如果您的代码需要在具有 64 KiB 内存的系统上运行,您最好保持变量小于 64 KiB。或者,如果它在 512 KiB 系统上,则小于 512 KiB。这大致就像回答“一根绳子有多长”。

标签: c pointers stack


【解决方案1】:

就C语言而言,一个结构体的最大尺寸是

2 ^ (8*sizeof(size_t)) 字节,

^ 应该读作“权力”。

除此之外,限制取决于您的特定系统。

【讨论】:

    【解决方案2】:

    你似乎有三个问题:

    • 一个指针可以指向多大的内存块:这里的限制是指针大小的限制 - 无论是 32 位还是 64 位指针。但实际上,没有机器可能有足够的内存来使 64 位限制成为问题。

    • 我可以在堆栈上声明多大的结构(这意味着在某个级别上的本地声明):堆栈大小在所有硬件上都受到限制,通常比堆更受限制,堆栈不适用于大型对象和堆栈限制可能会受到限制,尤其是在嵌入式系统中。这里的问题不是单个堆栈对象的大小,而是受限堆栈的总大小。

    • 我可以从堆中分配多大的结构(这意味着使用newmalloc 分配的结构:堆是可用内存的“其余部分”;这个区域通常更大更好的地方对于大分配;同样,最大空间完全取决于执行环境。在任何时候,进程都有最大数量的连续堆可用,这相当于可以分配的最大对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 2014-07-22
      • 1970-01-01
      • 2012-08-13
      相关资源
      最近更新 更多