[英]How to link two global variables to same address using linker script, C language?
[英]how to place global variables placed adjacent? (without setting it at linker script)
我想將 3 個變量彼此相鄰放置 32 個字節。 這是為了調試,一個可疑的行為。
對於這行 C 代碼(sparc,bare-metal,在 function 之外定義一個全局變量。)
int __attribute__ ((aligned (32))) xx0, layer_complete, xx1;
僅使用此代碼,變量 xx0、xx1、layer_complete 對齊到 32 字節,但就在 layer_complete 之后,放置了一些變量。 我只想將一個變量放置在 32 位范圍內。 (話雖如此,我有一個使用聯合的想法。但我很好奇我是否可以在沒有聯合的情況下做到這一點)。
添加:我用聯合嘗試了這個(在 layer_complete 之后騰出一些空間)
union ttt {
int layer_complete;
int a[8]; // to make it 32 bytes
} __attribute__((aligned(32))) lc_union;
#define layer_complete lc_union.layer_complete
檢查 program.map 我可以看到 layer_complete 是 32 字節對齊的,並且沒有使用以下 28 字節(當然)。
這應該可以解決問題:
typedef struct
{
int _Alignas(32) xx0;
int _Alignas(32) layer_complete;
int _Alignas(32) xx1;
} thing;
...
thing t;
如果您出於某種原因使用的是非常舊的 gcc 版本(C11 之前,4.x 或更早版本),那么您也可以使用非標准__attribute__ ((aligned (32)))
。
由於這僅用於調試目的,您可以制作諸如#define xx0 t.xx0
類的宏,以使結構與您已有的結構兼容。
有這樣的東西:
char memVar96[96];
void *ptr1 = memVar96;
void *ptr2 = &memVar96[32];
void *ptr3 = &memVar96[64];
#define var1 (*(MyVarType1*)ptr1)
#define var2 (*(MyVarType2*)ptr2)
#define var3 (*(MyVarType3*)ptr3)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.