我正在试验我的第一个需要在Linux Redhat 5.3和Windows XP/Vista/7上运行的跨平台应用程序.
由于某些操作系统将运行x86或64,我想知道要声明的数据类型.
我不想使用任何库来实现跨平台的可移植性; 我想先自己做实验.
如果我需要一个int,我应该声明int32或int64还是只是int?
如果我要在64位操作系统上编译并使用int32那么数据会被截断为32位值,所以我会丢失一些数据吗?
我想知道如果我在具有不同架构的不同操作系统上运行我应该如何声明.
Mar*_*n B 13
在许多64位操作系统(例如64位Linux)中,整数仍然只有32位宽; 只有long和指针是64位宽.这被称为LP64数据模型.其原因在于,在许多情况下,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位之间的可移植性.
| 归档时间: |
|
| 查看次数: |
3972 次 |
| 最近记录: |