我在Linux上,編碼爲C,並嘗試使用argv變量的align屬性,但沒有運氣:C - 內存對齊argv?
我們如何導致argv參數(每個參數)與指定邊界對齊,比方說16位,,而不是通過memcpy或其他選項先將它複製到對齊變量?
這有可能嗎?
我在Linux上,編碼爲C,並嘗試使用argv變量的align屬性,但沒有運氣:C - 內存對齊argv?
我們如何導致argv參數(每個參數)與指定邊界對齊,比方說16位,,而不是通過memcpy或其他選項先將它複製到對齊變量?
這有可能嗎?
這是不可能的。 align屬性告訴編譯器如何對它爲其生成代碼和數據的結構進行對齊。它還會告訴編譯器extern結構和其他代碼生成的數據的實際對齊。
argv自變量由C啓動代碼或OS直接提供。除了指針數組的隱式自對齊之外,不應該假設它們的對齊。你不能用編譯器屬性來改變它,不建議強制編譯器做出其他假設。
確實,很高興知道。謝謝 ! – Kroma 2015-03-19 08:29:12
在某些實現中,argv變量可以直接指向原始命令行,其中每個參數後的第一個分隔符(空格)已被空值替換。 在這樣的實現中,很明顯,對齊是它是什麼,不能被控制的!
絕對是。非常感謝+1 – Kroma 2015-03-19 08:29:58
您認爲誰需要'argv'字符串有任何特定的對齊方式,爲什麼? – chqrlie 2015-03-19 07:38:08
@chqrlie:沒有人,甚至是我自己!只是爲了好奇:) – Kroma 2015-03-19 08:30:45