作爲工會或結構的全局變量的默認對齊方式是什麼。他們是否保證字對齊?特別是使用GCC和SDCC時。C中的默認聯合和結構對齊?
在代碼中,函數f()
是否安全,還是會導致未對齊訪問? 16位和32位平臺有區別嗎?
#define ADDR_SIZE 8
typedef union {
unsigned char u8[ADDR_SIZE];
} addr_t;
addr_t global_address;
void f(void) {
uint32_t x = *((uint32_t *)&global_address) + *((uint32_t *)&global_address + 1);
}
使用編譯指示確保包結構。請參見[這裏](https://gcc.gnu.org/onlinedocs/gcc/Structure-Packing-Pragmas.html) – LPs
術語「Word」沒有定義的大小/寬度,所以在這裏沒用。該標準沒有(不能)強加任何對齊。 – Olaf
Pragma不是一種選擇,因爲代碼必須根據項目規則是「獨立於編譯器」。 – kfx