cocos2d-x-xcode下cocos2dx工程字节对齐问题

问题描述

xcode下cocos2dx工程字节对齐问题

最近小的将android下的cocos2dx工程移入苹果中时,发现在xcode中存在字节对齐问题:

例,有结构体如下:
     struct   tagTest
     {
          unsigned char     cFst;
          unsigned char cSec;
          unsigned char cThird[2];
          long long         iFour;
      };

 问题如下:

 1.在xcode中用sizeof(struct tagTest)求得的大小为12。(问题1:是否哪里有什么默认设置项?)

 2.使用#pragma pack(4)、#pragma pack(8)设置均无效,大小还是12。(问题2:什么情况导致的?ps:不是xcode编译器不支持此指令,请留意问题6)

 3.在此结构体后面使用__attribute__ ((aligned (8)))有效,sizeof()测得的大小为16,但是,最坑爹的问题来了:

   假如tagTest的地址为0x0029FA00,则调试打印出来各成员的地址如下:&cFst = 0x0029FA00, &cSec = 0x0029FA01, &cThird = 0x0029FA02

   以上3个地址都没错,但是 &iFour = 0x0029FA04, 此时其地址应该为0x0029FA08才是正确的.

   也就是说使用__attribute__ ((aligned (8)))后,结构体字节是对齐了,但是编译器没有在cThird和iFour之间填充,而是在iFour之后填充内存。(问题3:为什么会导致此情况发生?如何避免?)

 4.在ios下新建一个helloword的cocos2dx工程,复制上述结构体,sizeof(struct tagTest)求得的大小为16。(问题4:why?)

 5.在上述新工程中使用__attribute__ ((aligned (4))),结果无效,sizeof还是16.(问题5:与问题3情况刚好相反,why?)

 6.在上述新工程中使用#pragma pack(4),结果有效,sizeof是12.(问题6:与问题2情况刚好相反,why?)

 上述种种蛋疼的问题,不知如何解决,跪求大神指定一二,能逐条详细解答最好,感激不尽。。。

解决方案

http://blog.chinaunix.net/uid-15063109-id-4275575.html

解决方案二:

使用xcode 7 开发cocos2dx问题
----------------------

时间: 2024-08-08 07:25:28

cocos2d-x-xcode下cocos2dx工程字节对齐问题的相关文章

xcode-关于XCode导入cocos2dx工程接入微信分享SDK问题!

问题描述 关于XCode导入cocos2dx工程接入微信分享SDK问题! 接入微信功能示例 解决方案 增加delegate中是继承的时候添加

visual studio 2010-往vs201里导入cocos2d-x工程报错

问题描述 往vs201里导入cocos2d-x工程报错 vs2010错误提示 无法打开包括文件:"GamePlayingDataController.h": No such file or directory 我在解决方案中能找到这个文件 解决方案 将Cocos2d-x的VS工程导入XCode新建Cocos2d-x工程 vs2010cocos2d-x 3.0 创建VS工程

【IOS-COCOS2D-X 游戏开发之一】在MAC下结合XCODE搭建COCOS2D-X开发环境&卸载COCOS2DX模版

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/iphone-cocos2dx/599.html 2011-3-6更新: 今天大概说下关于cocos2d与cocos2d x的卸载方面的小提示,至于Cocos2d与Cocos2dX卸载基本网上都有相关文章,但是!今天说的是如何卸载Cocos2d在Xcode的模版: 卸载Cocos2d/X其实就是删除其相关文件即可,这个好说,但是模版这东西有些

xcode obje...-xcode下怎么安装cocos 2d

问题描述 xcode下怎么安装cocos 2d 在Xcode 怎么安装cocos 2d,研究了很久一直不会啊 解决方案 你说的是cocos2dx吧 cocos2d早就淘汰了, 2dx是下载后通过命令行创建工程 3.x版本已经把引擎代码放到模板内了,

ubuntu 下 cocos2dx游戏引擎的搭建、编译和使用

cocos2dx是一个基于c++ opengl的二维游戏引擎 开源免费 支持跨平台发布 包括windows linux 安卓 苹果等等 我想用一个二维引擎入门学习游戏应该是个不错的选择 而且这个引擎作品不少 尤其是国内的作品 比如史上最坑爹游戏 捕鱼达人(这个游戏作者还专门用这个游戏为例子写了一本教程)因为个人喜好 一直喜欢在linux(我的ubuntu)上搭建各种平台 这次也不例外 经过各种百度谷歌查找文档 终于搭建好了 从笔记拿出来分享下 一引擎目录分析 首先下载引擎源码 打开查看目录结构

C++字节对齐容易被忽略的两个问题

今天我就和大家分享一下C++字节对齐容易被忽略的两个问题.以下问题也是我实际开发工作中遇到的,如果有不同意见欢迎交流   在这里就分享两条开发中曾经忽略的问题:1.Union(联合体)的字节对齐先看代码:#pragma pack(4) struct com {  union  {   double dTest;   int nTest;   char szTest[14];  };  char chTest1;  char chTest2; }; #pragma pack() sizeof(st

[面试经]字节对齐

一.快速理解 什么是字节对齐? 在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int.long.float等)的变量,也可以是一些复合数据类型(如数组.结构.联合等)的数据单元.在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间.各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同. 为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的"对齐". 比如4字节的int型,其起始地址应该

cpu-c语言中字节对齐求解??

问题描述 c语言中字节对齐求解?? 在其中一篇文章中看到这样一段话:比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的.假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取它的值的话需要访问两次内存,第一次取从0x00000002-0x00000003的一个short,第二次取从0x00000004-0x00000005的一个short然后组合得到所要的数据,如果变量在0x00000003地址上的话则要访问三次内存,第一次为char,

Xcode下的中文乱码问题

=========== 问题原因 绝大部分的中文乱码是因为文件编码不对导致的: 使用了GBK的文件编码方式在Xcode下是无法识别的 老版本的Xcode对带BOOM头的UTF8文件编码也是无法识别的(我的Xcode 5.0.2已经支持带BOM头的UTF8文件了) 出现上述情况一般都是因为跨平台共用文件导致的,Windows,Mac共同使用的代码文件会出现乱码的问题. 最好的解决方案 Windows和Mac下统一使用UTF8带BOM头的文件编码格式. 特别解释下 以前是这样的: UTF8不带BOM