首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于x86 gcc2.9 变量对齐解决办法

2013-12-15 
关于x86 gcc2.9 变量对齐在头文件中定义 typedef struct{xxxx;xxxx}structname __attribute__((__aligned_

关于x86 gcc2.9 变量对齐
在头文件中定义 

typedef struct
{
xxxx;
xxxx
}structname __attribute__((__aligned__(0x1000)));

在源文件中使用:

structname yyyy[5];

yyyy 的地址没有按照4k进行对齐。
请问怎么才能让它在编译的时候进行对齐。
如果声明成:

structname yyyy[5] ={0};

可以进行对齐,但是我不希望yyyy被放在data段。
请各位帮忙,在gcc2.9下如何才能让yyyy在bss段,并地址按照4k进行对齐。
x86 gcc 对齐
[解决办法]
应该这样用,你的写法是结构体内部的对齐:

#include <stdio.h>

typedef struct
{
int x;
int y;
}point_t;

point_t pt[5] __attribute__((__aligned__(0x1000)));

int main(int argc, char* argv[])
{
printf("%p\n", &pt[0]);

return 0;
}


引用:
在头文件中定义 
typedef struct
{
xxxx;
xxxx
}structname __attribute__((__aligned__(0x1000)));

在源文件中使用:

structname yyyy[5];

yyyy 的地址没有按照4k进行对齐。
请问怎么才能让它在编译的时候进行对齐。
如果声明成:

structname yyyy[5] ={0};

可以进行对齐,但是我不希望yyyy被放在data段。
请各位帮忙,在gcc2.9下如何才能让yyyy在bss段,并地址按照4k进行对齐。

[解决办法]
引用:
你说的我已经试过了,我们试了很多种,最后觉得应该是编译器的问题,因为我们用的编译器是tornado2.2里面的,这个编译器是风河修改gcc2.9.6得来的,可能修改了某些东西,我们不知道。现在我们决定还是把变量进行初始化,放在data段。
Quote: 引用:

应该这样用,你的写法是结构体内部的对齐:

#include <stdio.h>

typedef struct
{
int x;
int y;
}point_t;

point_t pt[5] __attribute__((__aligned__(0x1000)));

int main(int argc, char* argv[])
{
printf("%p\n", &pt[0]);

return 0;
}


Quote: 引用:

在头文件中定义 
typedef struct
{
xxxx;
xxxx
}structname __attribute__((__aligned__(0x1000)));

在源文件中使用:

structname yyyy[5];

yyyy 的地址没有按照4k进行对齐。
请问怎么才能让它在编译的时候进行对齐。
如果声明成:

structname yyyy[5] ={0};

可以进行对齐,但是我不希望yyyy被放在data段。
请各位帮忙,在gcc2.9下如何才能让yyyy在bss段,并地址按照4k进行对齐。

换了方式测试结果达到要求了么?为什么不放在data段呢?

热点排行