这次聊的话题主要是和硬件体系有关的。比如你的程序需要支持不同类型的CPU(x86、SPARC、PowerPC),或者是同种类型不同字长的CPU(比如x86和x86-64),这时候你就需要关心一下硬件体系的问题。<!--program-think-->
★基本类型的大小
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)。所以,不要对有符号整数进行右移操作。顺便说一下,即使没有移植性问题,代码中也尽量少用移位运算符。那些企图用移位运算来提高性能的同学更要注意了,这么干不但可读性很差,而且吃力不讨好。只要不太弱智的编译器,都会自动帮你搞定这种优化,无须程序员操心。
下一个帖子,准备聊一下“操作系统相关的跨平台问题”。
http://program-think.blogspot.com/2009/01/cxx-cross-platform-develop-4-hardware.html
分享到:
相关推荐
C++的可移植性和跨平台开发-编译器-操作系统-硬件体系 如果你平时使用C++进行开发,并且你对C++的可移植性问题不是非常清楚,那么我建议你看看这个系列。即使你目前没有跨平台开发的需要,了解可移植性方面的知识对...
《C++跨平台开发技术指南》是一本专注于C++语言跨平台开发的实用技术书籍。这本书详细介绍了C++在不同操作系统上,如Windows、Mac OS和Linux上开发应用程序的策略和实践。跨平台开发是软件开发领域中的一个重要方面...
总之,C++跨平台开发是一项复杂但值得投入的任务,它不仅可以扩大应用的受众范围,还可以提高代码的重用率和开发效率。通过采用上述策略和技术,开发者可以有效地克服跨平台开发中的挑战,创建出高质量、高可移植性...
最终,本书的目标是使读者能够在掌握C/C++语言和跨平台开发工具的基础上,学会利用各种技术手段编写可在Windows、MacOSX、iOS、Android和Linux等主流平台上运行的跨平台程序。通过理论与实践相结合的方式,书中将...
在跨平台开发方面,Qt4的移植性极强,其底层的QApplication和QWidget类能够适应多种操作系统,如Windows、Linux、macOS等。这使得开发者能够使用相同的设计模式和代码结构,实现一次编写,到处运行的目标。比如,...
C和C++是两种广泛用于跨平台开发的语言,因为它们具有高度的灵活性和广泛的可移植性。以下是对这两个主题的详细阐述: 一、跨平台软件开发 跨平台软件开发是指编写一次代码,然后能够在多种操作系统(如Windows、...
这些是进行跨平台开发的基础,因为它们确保代码的可移植性和复用性。 接下来,作者深入讨论了跨平台开发的关键问题,如处理操作系统差异、文件系统接口、线程与并发、网络编程以及图形用户界面(GUI)构建。在不同...
跨平台软件开发是指利用统一的软件设计和开发技术,使得软件产品能够在不同的操作系统和硬件平台上运行,而不需要针对每个平台做特别的修改。C++语言因其高效和强大的编程能力,在跨平台软件开发领域占有重要地位。...
使用Qt6和C++语言进行跨平台开发 在当下的软件开发领域,跨平台开发已经成为一个不可或缺的技术需求。作为一名软件开发者,我们需要能够在不同的操作系统上运行我们的应用程序,而不管是Windows、Linux还是Mac OS。...
从C++的基础到深入的MacOS和Android开发,再到实现软件可移植性的策略,每一个部分都对理解和掌握跨平台开发的核心概念至关重要。通过深入学习这些内容,开发者可以拓宽自己的视野,提高代码复用性,降低维护成本,...
在IT行业中,嵌入式系统和物联网(IoT)领域的发展日新月异,而“基于嵌入式Linux的具有可移植性的C++程序开发框架”正是这些领域的重要工具之一。 Embedme,作为这样一个框架,旨在简化Linux应用程序的开发过程,...
在本文中,我们将深入探讨"C++模式设计-基于QT4开源跨平台开发框架"的相关知识点。QT4是一个功能强大的开源库,它允许开发者使用C++语言构建高度交互式的图形用户界面(GUI)应用程序,同时支持多种操作系统,如...
标题 "C++跨平台开发库win32版" 指出这是一份适用于C++编程的跨平台开发库,特别针对Windows 32位环境进行了优化。这意味着它包含了一系列库文件和头文件,允许开发者在不同的操作系统上构建和运行C++应用程序,同时...
标题中的“纯标准c++实现的跨平台INI文件解析类”指的是使用纯C++语言编写的一个类库,它能够解析和操作INI配置文件,并且可以在多种操作系统上运行,体现出跨平台特性。INI文件是一种常见的轻量级配置文件格式,...
1. **使用标准化的C++库**:为了确保编写的程序具有良好的可移植性,应尽量使用C++标准库中的功能。避免使用平台特定的API或库,这样可以减少修改代码以适应不同平台的需要。 2. **配置跨平台的编译环境**:使用如...
C++ Qt6 跨平台开发是一项重要的技术,它允许开发者使用C++语言构建可以在多个操作系统上运行的应用程序,包括Windows、Linux、macOS、Android以及iOS等。Qt库提供了丰富的功能,涵盖了图形用户界面(GUI)、网络...
本文将深入探讨C++中实现跨平台线程和线程池的相关知识点。 1. **线程基础**: - 线程是操作系统调度的基本单位,一个进程中可以有多个线程并发执行,共享同一地址空间。 - C++11引入了`<thread>`库,提供了原生...
同时,混合开发技术可以在多种移动操作系统上运行,提高了APP的可移植性。 五、结论 混合移动APP跨平台混合开发是一种新的开发方式,可以大幅降低APP开发周期和技术门槛。该文研究了混合开发技术的原理和模式,并...
在给定的文件名中,我们看到"qt-win-opensource-4.2.0-mingw.exe"和"MinGW-3.4.2.exe",这两个文件与Qt框架和MinGW有关,它们都是用于跨平台C++开发的重要工具。 1. **Qt框架**:Qt是一个功能丰富的C++库,它提供了...