第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

堆棧變量是否由GCC __attribute __((aligned(x)))對齊?

堆棧變量是否由GCC __attribute __((aligned(x)))對齊?

C
至尊寶的傳說 2019-10-28 10:53:49
我有以下代碼:#include <stdio.h>intmain(void){        float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};        printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);}我有以下輸出:0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac為什么地址a[0]不是的倍數(shù)0x1000?到底__attribute__((aligned(x)))是什么?我誤解了這個解釋嗎?我正在使用gcc 4.1.2。
查看完整描述

3 回答

?
慕尼黑5688855

TA貢獻(xiàn)1848條經(jīng)驗 獲得超2個贊

我相信問題是您的陣列在堆棧上。因為在函數(shù)啟動時堆棧指針可以是任何東西,所以如果不分配過多的內(nèi)存并進(jìn)行調(diào)整,就無法對齊數(shù)組。如果將數(shù)組移出函數(shù)并移至全局變量,則該數(shù)組應(yīng)該起作用。您可以做的另一件事是將其保留為局部變量(這是一件非常好的事情),但要使其成為static。這樣可以防止將其存儲在堆棧中。請注意,這兩種方式都不是線程安全的或遞歸安全的,因為將只有該數(shù)組的一個副本。


使用此代碼:


#include <stdio.h>


float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0};


int

main(void)

{

        printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);

}

我得到這個:


0x804c000 0x804c004 0x804c008 0x804c00c

這是預(yù)期的。使用您的原始代碼,我將像您一樣獲得隨機(jī)值。


查看完整回答
反對 回復(fù) 2019-10-28
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗 獲得超1個贊

最近的GCC(經(jīng)4.5.2-8ubuntu4測試)似乎可以正常工作,并且陣列正確對齊。


#include <stdio.h>


int main(void)

{

    float a[4] = { 1.0, 2.0, 3.0, 4.0 };

    float b[4] __attribute__((aligned(0x1000))) = { 1.0, 2.0, 3.0, 4.0 };

    float c[4] __attribute__((aligned(0x10000))) = { 1.0, 2.0, 3.0, 4.0 };


    printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]);

    printf("%p %p %p %p\n", &b[0], &b[1], &b[2], &b[3]);

    printf("%p %p %p %p\n", &c[0], &c[1], &c[2], &c[3]);

}

我得到:


0x7ffffffefff0 0x7ffffffefff4 0x7ffffffefff8 0x7ffffffefffc

0x7ffffffef000 0x7ffffffef004 0x7ffffffef008 0x7ffffffef00c

0x7ffffffe0000 0x7ffffffe0004 0x7ffffffe0008 0x7ffffffe000c


查看完整回答
反對 回復(fù) 2019-10-28
  • 3 回答
  • 0 關(guān)注
  • 880 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號