`
Riddick
  • 浏览: 640585 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

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

阅读更多

这次聊的话题主要是和硬件体系有关的。比如你的程序需要支持不同类型的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)。所以,不要对有符号整数进行右移操作。顺便说一下,即使没有移植性问题,代码中也尽量不要使用移位运算操作,可读性太差。
本篇文章来源于:开发学院 http://edu.codepub.com   原文链接:http://edu.codepub.com/2009/0930/15966.php

分享到:
评论

相关推荐

    C++的可移植性和跨平台开发-编译器-操作系统-硬件体系

    C++的可移植性和跨平台开发-编译器-操作系统-硬件体系 如果你平时使用C++进行开发,并且你对C++的可移植性问题不是非常清楚,那么我建议你看看这个系列。即使你目前没有跨平台开发的需要,了解可移植性方面的知识对...

    C++设计模式--基于Qt4开源跨平台开发框架

    在跨平台开发方面,Qt4的移植性极强,其底层的QApplication和QWidget类能够适应多种操作系统,如Windows、Linux、macOS等。这使得开发者能够使用相同的设计模式和代码结构,实现一次编写,到处运行的目标。比如,...

    C++跨平台开发技术指南.pdf

    《C++跨平台开发技术指南》是一本专注于C++语言跨平台开发的实用技术书籍。这本书详细介绍了C++在不同操作系统上,如Windows、Mac OS和Linux上开发应用程序的策略和实践。跨平台开发是软件开发领域中的一个重要方面...

    c++跨平台开发

    总之,C++跨平台开发是一项复杂但值得投入的任务,它不仅可以扩大应用的受众范围,还可以提高代码的重用率和开发效率。通过采用上述策略和技术,开发者可以有效地克服跨平台开发中的挑战,创建出高质量、高可移植性...

    C++跨平台处理UTF-8库

    在C++编程中,处理...总之,这个C++跨平台处理UTF-8的库是解决C++与Unicode交互问题的有效工具,它增强了C++的标准库功能,使得开发者能够在不同平台上以一致的方式处理多语言文本,提高软件的可移植性和用户体验。

    C++跨平台开发技术指南 中英文版 pdf

    这些是进行跨平台开发的基础,因为它们确保代码的可移植性和复用性。 接下来,作者深入讨论了跨平台开发的关键问题,如处理操作系统差异、文件系统接口、线程与并发、网络编程以及图形用户界面(GUI)构建。在不同...

    C++模式设计-基于QT4开源跨平台开发框架所有程序

    在本文中,我们将深入探讨"C++模式设计-基于QT4开源跨平台开发框架"的相关知识点。QT4是一个功能强大的开源库,它允许开发者使用C++语言构建高度交互式的图形用户界面(GUI)应用程序,同时支持多种操作系统,如...

    基于C++语言下的跨平台软件开发设计研究

    跨平台软件开发是指利用统一的软件设计和开发技术,使得软件产品能够在不同的操作系统和硬件平台上运行,而不需要针对每个平台做特别的修改。C++语言因其高效和强大的编程能力,在跨平台软件开发领域占有重要地位。...

    跨平台开发的一些资料合集

    从C++的基础到深入的MacOS和Android开发,再到实现软件可移植性的策略,每一个部分都对理解和掌握跨平台开发的核心概念至关重要。通过深入学习这些内容,开发者可以拓宽自己的视野,提高代码复用性,降低维护成本,...

    《C/C++编写跨平台程序:实践篇》

    最终,本书的目标是使读者能够在掌握C/C++语言和跨平台开发工具的基础上,学会利用各种技术手段编写可在Windows、MacOSX、iOS、Android和Linux等主流平台上运行的跨平台程序。通过理论与实践相结合的方式,书中将...

    基于嵌入式Linux的具有可移植性的C++程序开发框架

    在IT行业中,嵌入式系统和物联网(IoT)领域的发展日新月异,而“基于嵌入式Linux的具有可移植性的C++程序开发框架”正是这些领域的重要工具之一。 Embedme,作为这样一个框架,旨在简化Linux应用程序的开发过程,...

    c++ 跨平台线程 线程池

    本文将深入探讨C++中实现跨平台线程和线程池的相关知识点。 1. **线程基础**: - 线程是操作系统调度的基本单位,一个进程中可以有多个线程并发执行,共享同一地址空间。 - C++11引入了`<thread>`库,提供了原生...

    用C++编写跨平台程序

    1. **使用标准化的C++库**:为了确保编写的程序具有良好的可移植性,应尽量使用C++标准库中的功能。避免使用平台特定的API或库,这样可以减少修改代码以适应不同平台的需要。 2. **配置跨平台的编译环境**:使用如...

    使用Qt6和C++语言进行跨平台开发

    使用Qt6和C++语言进行跨平台开发 在当下的软件开发领域,跨平台开发已经成为一个不可或缺的技术需求。作为一名软件开发者,我们需要能够在不同的操作系统上运行我们的应用程序,而不管是Windows、Linux还是Mac OS。...

    C++ Qt6 跨平台开发(机翻).zip

    C++ Qt6 跨平台开发是一项重要的技术,它允许开发者使用C++语言构建可以在多个操作系统上运行的应用程序,包括Windows、Linux、macOS、Android以及iOS等。Qt库提供了丰富的功能,涵盖了图形用户界面(GUI)、网络...

    纯标准c++实现的跨平台INI文件解析类

    标题中的“纯标准c++实现的跨平台INI文件解析类”指的是使用纯C++语言编写的一个类库,它能够解析和操作INI配置文件,并且可以在多种操作系统上运行,体现出跨平台特性。INI文件是一种常见的轻量级配置文件格式,...

    跨平台的C++程序开发框架

    在给定的文件名中,我们看到"qt-win-opensource-4.2.0-mingw.exe"和"MinGW-3.4.2.exe",这两个文件与Qt框架和MinGW有关,它们都是用于跨平台C++开发的重要工具。 1. **Qt框架**:Qt是一个功能丰富的C++库,它提供了...

    C++跨平台开发库win32版

    标题 "C++跨平台开发库win32版" 指出这是一份适用于C++编程的跨平台开发库,特别针对Windows 32位环境进行了优化。这意味着它包含了一系列库文件和头文件,允许开发者在不同的操作系统上构建和运行C++应用程序,同时...

    跨平台移植win32至android

    【跨平台移植Win32至Android】:在软件开发中,跨平台移植是一项重要的技能,它允许开发者将应用从一个操作系统或硬件环境移植到另一个。本文档主要关注将基于Cocos2d-x的游戏或应用程序从Windows(Win32)移植到...

Global site tag (gtag.js) - Google Analytics