【发布时间】:2019-03-22 23:07:48
【问题描述】:
C 中数据类型的大小限制是如何确定的?
This question's answers 说使用limits.h 作为数据类型的最小值和最大值。尽管有些人可能会停下来说好吧,好吧,我在想:它怎么知道? limits.h 中的限制是如何设置的,以便您可以在任何机器(任何环境?)上使用相同的 limits.h。
显然,32 位机器处理事情的方式与 64 位机器不同。然后你就有了小端与大端的复杂性。它是怎么知道的(用简单的英语)?
【问题讨论】:
-
它只是硬编码在每个编译器版本/平台的编译器头文件中
-
@Jean-FrançoisFabre 那么有人的工作就是填写这些字段吗? “嘿,我想为这个处理器做一个编译器”......然后我必须打电话给制造处理器的公司并获得规格,然后从中得出可能的值?是这样的吗?
-
编译/生成编译器时,编译脚本也会创建/生成/实例化limits.h头文件,因为它们确切地知道它的目标是哪个CPU(使用条件#define,你可以有一个限制.h 文件用于多种架构)。是的,要为 CPU 创建编译器,您必须准确了解 CPU 规格:)
-
创建编译器很困难。这就是为什么每个人都不会创建自己的并依赖现有的:)
-
“那我得打电话给制造处理器的公司并获得规格”是的。您还想询问寄存器的数量和名称、调用约定 (ABI)、CPU 的指令集以及更多详细信息。 limits.h 的值只是其中的一小部分。