以c为单位的数据类型的大小 [英] size of a datatype in c

查看:16
本文介绍了以c为单位的数据类型的大小的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

数据类型的大小取决于硬件体系结构还是取决于编译器?

我想知道决定数据类型大小的真正影响因素是什么?

int

编译器(更确切地说是"实现")可以自由选择大小,但要遵守C标准中的限制(例如,推荐答案必须至少为16位)。编译器可以选择遵守其他标准,如POSIX,这些标准可以添加更多约束。例如,我认为POSIX规定所有数据指针的大小相同,而C标准完全适用于sizeof(int*) != sizeof(char*)

在实践中,编译器-编写者的决策很大程度上受到体系结构的影响,因为除非有很强的理由,否则他们希望实现是高效和可互操作的。处理器制造商或操作系统供应商通常会发布一种称为"C ABI"的东西,它会告诉您(以及其他信息)类型有多大,以及它们是如何存储在内存中的。编译器的体系结构永远不会遵循标准ABI,而且CPU通常都有多个公共ABI,但是要从一个编译器的代码直接调用到另一个编译器的代码,两个编译器必须使用相同的ABI。因此,如果您的C编译器没有在Windows上使用Windows ABI,那么您将需要额外的包装器来调用Windows dll。如果您的编译器支持多个平台,那么它很可能在不同的平台上使用不同的ABI。

您经常看到缩写用来表示使用了几个ABI中的哪一个。例如,当64位平台上的编译器说它是LP64时,这意味着long和指针是64位,省略的是int是32位。如果显示为ILP64,则表示int也是64位。

归根结底,这更多的是编译器编写者从合理的选项菜单中进行选择,而不是随意挑选数字。但是实现总是可以自由地做它想做的任何事情。如果您想为x86编写一个编译器,用9位字节和3字节字模拟机器,那么C标准允许这样做。但就操作系统而言,您只能靠自己。

这篇关于以c为单位的数据类型的大小的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆