Linux64,最大好处就是内存不在有4GB的限制(32位linux只有4G的虚拟地址寻址空间,可以克服这个限制,但是实现起来会比较复杂,得不偿失)。
数据模型
| ILP32 | LP64 | LLP64 | ILP64 |
char | 8 | 8 | 8 | 8 |
short | 16 | 16 | 16 | 16 |
int | 32 | 32 | 32 | 64 |
long | 32 | 64 | 32 | 64 |
long long | 64 | 64 | 64 | 64 |
指针 | 32 | 64 | 64 | 64 |
Linux64位,使用LP64标准,做代码移植时需要注意一些地方。
Struct或者Union的大小,会随着升级到64位系统,发生改变,特别是边界对齐。原来32位的数据类型,在64位系统上,也许会需要补齐64位;
需要特别注意的地方总结了一下,大概下面几点:
1. 特别注意改变了大小的数据类型:long,指针;
2. 不能像32位系统上,用int来存储指针;
3. 数字常量,需要做改变,比方说0xFFFFFFFF在32位机器上如果是long为-1,但是在64位会被当成是一个正数,这个需要特殊考虑;
4. 为了更好的代码移植性,有些类型尽量使用linux定义好的平台无关的类型,如size_t,ptrdiff_t,intptr_t;
5. Printf打印指针的参数格式应该为%p(32位上%x也可以)。