社区
Linux/Unix社区
帖子详情
Linux下gcc编译得问题
ajsword
2003-11-13 05:18:49
相同得C文件,在两个linux系统下用gcc编译,执行得时候发现用sizeof计算出来得结构体大大小不同,虽然知道是位对齐方面的问题,有什么好得方法解决吗,怎么解决
...全文
32
10
打赏
收藏
Linux下gcc编译得问题
相同得C文件,在两个linux系统下用gcc编译,执行得时候发现用sizeof计算出来得结构体大大小不同,虽然知道是位对齐方面的问题,有什么好得方法解决吗,怎么解决
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ajsword
2003-11-14
打赏
举报
回复
又沉下去啦:(
fxiangh
2003-11-14
打赏
举报
回复
第一招:
malloc(SIZE)
第二招:
用联合
union {
struct XXX;
char buf[SIZE];
} SOMETYPE;
ajsword
2003-11-14
打赏
举报
回复
能否解释一下代码得含义,谢谢
还有能不能修改编译器得选项,怎么改
ajsword
2003-11-14
打赏
举报
回复
如果是要修改编译器得选项应该怎么改
kangjian1
2003-11-14
打赏
举报
回复
#define ALIGN 2 //如果你的编译器不能4字节对齐只能2字节对齐,就要有着一句
typedef struct tagXXX //你定义的结构
{
char a;
#if ALIGN_2 //如果是2字节对齐
char pad[3]; //填补3个空字节
#endif
int b;
}XXX;
这个方法是一些操作系统为了避免你说的问题所采用的常见的方法
踏岸寻柳
2003-11-14
打赏
举报
回复
sizeof的结果同编译器有关,不同的编译器结果可能不同的;
该结果又与编译选项有关,同一个编译器不同的编译选项结果可能不同。
kangjian1
2003-11-13
打赏
举报
回复
抛开第二点不说,在第一种情况往往采用如下的定义方法:
#define ALIGN 2
typedef struct tagXXX
{
char a;
#if ALIGN_2
char pad[3];
#endif
int b;
}XXX;
(注意char型不会对齐)
kangjian1
2003-11-13
打赏
举报
回复
这有2方面的原因:
1.编译器往往有一个选项,是为了确定结构内成员的对齐方式,比如:
typedef struct tagXXX
{
char a;
int b;
}XXX;
如果采用"以4字节对齐"那么sizeof(XXX)应该是8,即在a后面空了3个字节,
以达到让b的地址是4的整数倍.
如果采用"以2字节对齐"那么sizeof(XXX)应该是6,即在a后面空了1个字节,
以达到让b的地址是2的整数倍.
具体要看编译器的选项.
2.可能是系统的位数不同.在16位机上int是2个字节而在32位上是4个字节.
new1mm
2003-11-13
打赏
举报
回复
为什么一定要相同呢?
ajsword
2003-11-13
打赏
举报
回复
up
Linux
编程之
GCC
编译
工具实战
本课程使得学员能够学会在
linux
中如何
编译
C/C++程序,使用
GCC
工具如何
编译
静态库,动态库,如何配置运行动态库。
Linux
下
GCC
编译
C语言
Linux
下
GCC
编译
C语言
Linux
下
GCC
编译
C语言 1.创建一个.C文件 # vi/vim name.c 2.
编译
name.c文件,生成可执行文件 #
gcc
name.c 3.执行文件,在默认情况下产生的可执行程序名为a.out # ./a.out 4.通常可以...
Linux
下
gcc
编译
C/C++文件过程分解
Linux
下
gcc
编译
C/C++文件过程 以下面简单的main.c文件为例 #include <stdio.h> int main(){ printf("Hello World main!\n"); return 0; } 在
Linux
下执行C/C++的
编译
过程要严格遵循
gcc
的
编译
规律,
gcc
的相关...
简明
Linux
-
Linux
下
GCC
编译
C程序(g++
编译
c++类似)
GCC
编译
步骤简介1
GCC
编译
四步骤2
GCC
编译
选项3 静态库和共享库3.1 静态库生成及使用3.2 动态库生成及使用3.3**数据段合并和地址回填**1.4 注意事项 1
GCC
编译
四步骤
GCC
编译
可执行程序四步骤:预处理
编译
汇编 ...
Linux
GCC
编译
详细
在
Linux
中使用
gcc
编译
“hello.c”文件,只须使用最简单的指令,如下所示 $
gcc
hello.c -o hello 事实上,上述过程可以分解成四个部分:预处理(预
编译
)、
编译
、汇编、链接 一、预处理 首先是源代码文件“hello...
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章