2011-12-02 10 views

cevap

4

gcc ile __alignof__ (type)more arasındaki hizalamayı bulabilirsiniz. Bununla birlikte, değer mimariye bağımlıdır, bu nedenle taşınabilirlik için, her makine üzerindeki hizalamayı bir makroyla belirlemelisiniz. Yani hsc2hs muhtemelen daha iyi bir yoldur.

Yanlış hizalamanın çökmelere neden olabileceğini düşünüyorum, ancak emin değilim.

7

Düzeltme: Özür dilerim, soruyu yanlış anladım ve bunu hsc2hs ile yapmamanı istediğini düşündüm, değil. Yanlış hizalama, yanlış verilere yol açabilir ve çökmelere neden olabilir (bir dizi yapıyı sıraya alıp almadığınızı düşünün), böylece taşınabilir bir şey kullanmanız gerekir.

FFI cookbook göre, daha sonra

instance Storable Struct where 
    alignment _ = #{alignment my_struct} 
    sizeOf _ = #{size my_struct} 

alignment anahtar kelime olarak kullanılır

#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__) 

ghc> 7.2.1 kullanılabilir olmalıdır tanımlayabilirsiniz, bu nedenle gerek olmazdı Kendinizi çok yeni ghc'lerle tanımlamak.