跨平台:选择使用32/64位的数据类型
我正在试验我的第一个需要在
Linux Redhat 5.3和Windows XP / Vista / 7上运行的跨平台应用程序.
由于某些操作系统将运行x86或64,我想知道要声明的数据类型. 我不想使用任何库来实现跨平台的可移植性;我想先自己做实验. 如果我需要一个int,我应该声明int32或int64还是只是int? 如果我要在64位操作系统上编译并使用int32那么数据会被截断为32位值,所以我会丢失一些数据吗? 我想知道如果我在具有不同架构的不同操作系统上运行我应该如何声明. 解决方法
在许多64位操作系统(例如64位Linux)中,整数仍然只有32位宽;只有long和指针是64位宽.这被称为
LP64 data model.其原因在于,在许多情况下,int不需要比32位提供的范围更多的范围,并且使用64位只会浪费内存.在64位Windows下,evens longs是32位(与32位Windows的兼容性),只有long long是64位;这被称为LLP64数据模型.
如果您的应用程序将在32位和64位操作系统上运行,那么32位整数的范围显然已足够 – 否则,您将在32位操作系统上遇到麻烦.因此,在这些情况下继续使用整数.如果您可以识别需要64位整数范围的情况,请显式使用int64_t(在stdint.h中定义).要确保您写入磁盘的二进制数据格式在不同平台上兼容,请在这些位置明确使用int32_t和int64_t ……但也要注意潜在的字节序问题. 最后,在编写64位代码时,请注意指针无法在LP64数据模型中转换为int – 因此请使用uintptr_t. 如果您编写干净的代码,32位/ 64位可移植性应该几乎不是问题 – 除了我上面所写的内容之外,您还不需要了解更多内容. Windows和Linux之间的可移植性将产生更大的问题,即32位和64位之间的可移植性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |