【问题标题】:Does ansi C place a limit on the size of a program in memory?ansi C是否对内存中程序的大小进行了限制?
【发布时间】:2023-11-27 09:04:02
【问题描述】:

我被告知了这一点,但在网络上找不到确认或反驳。这是真的?如果是这样,什么是限制?它通常由编译器强制执行吗?

【问题讨论】:

  • 我希望这会非常依赖于架构和操作系统,而不是 ANSI 关心或关心的事情。
  • @Joe:我也一样,但我希望number of extern variables 或不同变量名中第一个不同字符的位置相同。在这两种情况下,ansi 都指定了兼容编译器必须支持的下限(分别为 4095 和 31 或 32)。由于 ANSI 关心这两个,它似乎也可以关心程序大小。

标签: c ansi


【解决方案1】:

ANSI C 不关心这种事情。

C99 标准的第 5 节 环境 中没有任何内容甚至谈到“在内存中加载程序”。

唯一的考虑因素是环境必须提供什么以符合作为语言/标准基础的抽象状态机。这不需要“在内存中加载程序” - 代码可以从一副打孔卡中假脱机。

在字符集、源代码代码大小和复杂性以及其他一些方面都有限制 - 但这些大多是符合标准的实现必须接受的下限,并且与 翻译环境,而不是执行环境。

【讨论】:

  • 确实,它甚至没有定义“程序的大小”可能是什么。对象有大小。其他东西,例如用于某些操作开销的函数和存储,可能会占用一些空间某处,但语言本身并没有提供它们大小的概念。
【解决方案2】:

如果您的可执行文件太大,您可能会遭受颠簸,但除了特定于实现的可执行格式之外,没有任何最大大小。

【讨论】:

    最近更新 更多