今天遇到了另一個把program從Windows(VC++) port到 Linux(gcc)的問題:
Struct alignment
就是說,compiler為了方便處理,會在struct中加插一些垃圾bytes,讓sturct的size變成4的倍數.
在正常情況,VC++和gcc都是用相同的alignment.
但是如果struct中有64bit integer,VC++會在這個integer前面加些垃圾,讓它的address變成64 bit aligned,但gcc卻不會.
結果雖然兩個program用了同樣的header去compile,它們卻用不同的方法處理memory,
如果一方直接把struct交給另一方用,便會無法溝通......
解決方法是小心的把這些垃圾bytes寫進header中,讓gcc用相同的alignment來access memory,
真麻煩~

沒有留言:
發佈留言