读书人

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

发布时间: 2013-12-15 22:17:19 作者: rapoo

关于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段呢?

读书人网 >C语言

热点推荐