使用 32 位和 64 位方式
您可以使用 XL C/C++ 编译器来开发 32 位或 64 位应用程序。 为此,请在编译期间分别指定 -q32 (缺省值) 或 -q64。 或者,您可以在编译时将 OBJECT_MODE 环境变量设置为 32 或 64。 如果同时指定了 OBJECT_MODE 和 -q32/-q64 ,那么 -q32/-q64 优先。
但是,将现有应用程序从 32 位 移植到 64 位方式 可能会导致许多问题,这些问题主要与 C/Clicensing 长整型和指针数据类型大小的差异以及这两种方式之间的对齐方式有关。 下表总结了这些差别。
| 数据类型 | 32 位方式 | 64 位方式 | ||
|---|---|---|---|---|
| 大小 | 对齐 | 大小 | 对齐 | |
| long、signed long 和 unsigned long | 4 个字节 | 4 字节边界 | 8 个字节 | 8 字节边界 |
| 指针 | 4 个字节 | 4 字节边界 | 8 个字节 | 8 字节边界 |
| size_t(在头文件 <cstddef> 中定义) | 4 个字节 | 4 字节边界 | 8 个字节 | 8 字节边界 |
| ptrdiff_t(在头文件 <cstddef> 中定义) | 4 个字节 | 4 字节边界 | 8 个字节 | 8 字节边界 |
以下部分讨论这些差别所隐含的一些常见陷阱,以及建议的编程实践,从而帮助您避免以下大多数问题:
在32位或64位模式下编译时,可以使用 -qwarn64 选项来帮助诊断与移植应用程序相关的某些问题。 在任一模式下,如果程序执行时出现截断或数据丢失等不良结果,编译器会立即发出警告。
有关提高 64 位方式下的性能的建议,请参阅 优化 64 位方式下的操作。