`
Riddick
  • 浏览: 633572 次
  • 性别: 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++跨平台开发的一本书, MacOS开发3个PDF文档, Android开发36技, 开发可移植性软件常用方法一篇文章 ...

    Qt入门PPT跨平台开发案例总结

    Qt具有广泛适应性及良好的可移植性,编写过的C++语言代码,只需在其他不同的操作系统平台中重新编译一遍,即可重复使用。 编程平台包括Windows 98、Windows XP、Vista、Win8、Mac OS X、Linux Solaris、HP-UX以及...

    C++精华资料全集——云盘链接

    Dlib:使用契约式编程和现代C++科技设计的通用的跨平台的C++库。 EASTL :EA-STL公共部分。 ffead-cpp :企业应用程序开发框架。 Folly:由Facebook开发和使用的开源C++库。 JUCE :包罗万象的C++类库,用于开发跨...

    C++编写的贪吃蛇源代码【基于跨平台的QT4图形库】

    自己用C++编写的贪吃蛇源代码,基于跨平台的QT4图形库,支持windows和linux平台,移植性极佳!

    跨平台移动App开发引擎CrossApp v0.5.0

    CrossApp是一款完全免费、开源、跨平台的移动app开发引擎,由9秒技术团队负责更新和维护。CrossApp拥有跨平台、整合部分第三方库、基于基于OpenGL ES 2.0、丰富的UI控件、提供CrossApp配套编辑器,以及CrossApp ...

    cpde_syslibs:跨平台开发环境-系统库

    cpde_syslibs 遵循CPDE模型的多个应用程序共有的系统库介绍CPDE-跨平台开发环境是用于构建C ++软件库和应用程序的一组约定和工具。 构建系统基于Code :: Blocks图书馆简介包含以下库图书馆名称描述op_lite 用于C ++...

    C++单元测试三大框架的比较

    可移植性好(因其只需两个头文件,就可以完成测试工作);便于装卸;提供接口可以扩展其输出方式等。最大的优点:轻量级,便于装卸和可扩展其输出方式;缺点: C++单元测试三大框架的比较软件测试 1、TUT 结构框架简单...

    C++轻量级通用插件框架源码

    代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,由多个独立插件模块组成。应用程序可以基于X3插件框架进行快速开发,X3插件框架中的插件既可以单独使用,又可以灵活组合使用。X3插件框架采用...

    poco c++ libraries_1.31

    POCO C++库是开源的用于简化和加速C++开发面向网络、可移植应用程序的C++库集,POCO库和C++标准库可以很好的集成并填补了C++标准库缺乏的功能空隙。POCO库的模块化、高效的设计及实现使得POCO特别适合嵌入式开发。在...

    dlib-18.1 各种数据处理 学习的c++源代码

    Dlib是一个使用现代C++技术编写的跨平台的通用库,遵守Boost Software licence. 主要特点如下: 1.完善的文档:每个类每个函数都有详细的文档,并且提供了大量的示例代码,如果你发现文档描述不清晰或者没有文档,...

    Electron跨平台桌面应用开发工具-其他

    Electron是GitHub发布的跨平台桌面应用开发工具,支持Web技术开发桌面应用,其本身是基于C++开发的,GUI核心来自于Chrome,而JavaScript引擎使用v8。 v12.0.10发行说明 修复 修复了某些 x11 窗口管理器无法正常拖放...

    C++开源程序库 C++开源程序库

    在目前的跨平台GUI框架中,Qt成熟度最高,已经被一些大公司应用在关键产品中。由于Trolltech对Qt采用的dual license模式,该产品既可以从开源社区获得支持,又能够赚取足够的商业利润,因此其前景也令人比较有信心。...

    人工智能-项目实践-嵌入式-用于快速构建可跨平台程序的嵌入式MCU固件库.zip

    人工智能-项目实践-嵌入式-用于快速构建可跨平台程序的嵌入式MCU固件库 ExLib 是一个嵌入式固件库,用于快速构建跨平台程序。 为了使 Exlib 上的代码库能够在不进行大改动的情况下移植到不同的硬件平台,ExLib 为...

    qtopia移植技术文档.ppt

    主流嵌入式Linux下GUI解决方案 Qt Qt是Trolltech公司所开发的一个跨平台FrameWork环境 (一个运行的平台,有一堆常用的“库”) 多平台的C++图形用户界面应用程序框架 支持组件编程 (把系统分割成...较好的可移植性

    C++入手项目(《C++语言程序设计》(第4版)课本项目).zip

    可移植性好:C语言编写的程序可以在多种操作系统和硬件平台上运行,因此,学习C语言可以帮助学生掌握跨平台编程的技能,提高程序的可移植性。 效率高:C语言具有高效性,它可以直接访问硬件资源,执行效率高。在...

    粘土游戏库

    写过游戏的人都有体会,写游戏是一个艰难的过程,但其实大部分时间是花在代码的重复...它的目标是简化游戏编程,实现游戏编程的可继承性和跨平台性。只要您熟悉C++,只需简单的使用所需的类,就能写出绘声绘色的游戏。

    基于Linux嵌入式开发板的Qt的移植与应用

    QT/E 是跨平台的C++图形用户界面(GUI)工具包,它是著名的Qt开发商TrollTech发布的面向嵌入式系统的Qt 版本,Qt 是目前KDE等项目使用的GUI 支持库,许多基于Qt的XWindow程序可以非常方便地移植到嵌入式Qt/Embedded ...

    Yoga:实现 Flexbox 的跨平台布局引擎-开源

    为了确保 Yoga 可以在任何地方使用,它是用可移植的 C/C++ 编写的,并且具有较少的依赖项和较小的二进制文件。 这意味着 Yoga 可以在 iOS 和 Android 上使用,在平台之间共享知识和潜在的代码。

    清华大学出版社《C++语言程序设计(第五版)》-郑莉 第3-12章全部课后习题参考答案.zip

    可移植性好:C语言编写的程序可以在多种操作系统和硬件平台上运行,因此,学习C语言可以帮助学生掌握跨平台编程的技能,提高程序的可移植性。 效率高:C语言具有高效性,它可以直接访问硬件资源,执行效率高。在...

Global site tag (gtag.js) - Google Analytics