当前位置:天才代写 > tutorial > C语言/C++ 教程 > C++的可移植性和跨平台开拓[4]:硬件体系相关

C++的可移植性和跨平台开拓[4]:硬件体系相关

2017-11-03 08:00 星期五 所属: C语言/C++ 教程 浏览:639

这次聊的话题主要是和硬件体系有关的。好比你的措施需要支持差异范例的CPU(x86、SPARC、PowerPC),可能是同种范例差异字长的CPU(好比x86和x86-64),这时候你就需要体贴一下硬件体系的问题。

★根基范例的巨细

C++中根基范例的巨细(占用的字节数)会跟着CPU字长的变革而变革。所以,如果你要暗示一个int占用的字节数,千万不要直接写“4”(顺便说一下,直接写“4”还犯了Magic Number的大忌,详见这里),而应该写“sizeof(int)”;反过来,假如你要界说一个巨细必需为4字节的有标记整数,也不要直接用int,要用预先typedef好的定长范例(好比boost库的int32_t、ACE库的ACE_INT32、等)。

差点忘了,指针的巨细也有上述的问题,也要小心。

★字节序

假如你没传闻过“字节序”这玩意儿,请看“维基百科”。通俗地打个例如,在一个大尾序的呆板上有一个4字节的整数0x01020304,通过网络可能文件传到一台小尾序的呆板上就会酿成0x04030201;听说尚有一种中尾序的呆板(不外我没打仗过),上述整数会酿成0x02010403。

假如你编写的应用措施中涉及网络通讯,必然要在记得举办主机序和网络序的翻译;假如涉及跨呆板传输二进制文件,也要记得举办雷同的转换。

★内存对齐

假如你不晓得“内存对齐”是什么东东,请看“维基百科”。简朴来说,出于CPU处理惩罚上的机能思量,布局体中的数据不是紧挨着的,而是要空开一些隔断。这样的话,布局体中每个数据的地点正好都是某个字长的整数倍。

由于C++尺度中没有界说内存对齐的细节,因此,你的代码也不能依赖对齐的细节。每每计较布局体巨细的处所,都老诚恳实写上sizeof()。

有些编译器支持#pragma pack预处理惩罚语句(可以用来修改对齐字长),不外这种语法不是所有编译器都支持,要慎用。

★移位操纵

对付有标记整数的右移操纵,有些系统默认利用算数右移(最高的标记位稳定),有些默认利用逻辑右移(最高的标记位补0)。所以,不要对有标记整数举办右移操纵。顺便说一下,纵然没有移植性问题,代码中也只管不要利用移位运算操纵,可读性太差。

下一个帖子,筹备聊一下“操纵系统相关的跨平台问题”。

 

    关键字:

天才代写-代写联系方式