星期五, 3月 17, 2006

另一個porting問題

今天遇到了另一個把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,
真麻煩~

沒有留言: