2011-12-02 8 views

risposta

4

Con gcc, è possibile trovare l'allineamento per more. Il valore è, tuttavia, dipendente dall'architettura, quindi per la portabilità, è necessario determinare l'allineamento su ogni macchina da una macro. Il che significa che hsc2hs è probabilmente il modo migliore.

penso che l'allineamento sbagliato può portare a crash, ma non so per certo.

7

Edit: Scuse, ho letto male la questione e ho pensato che stavi chiedendo di fare questo con hsc2hs, non senza. L'allineamento errato può portare a dati errati e causare arresti anomali (considerare se si sta eseguendo il marshalling di una matrice di strutture), quindi è necessario utilizzare qualcosa di portatile.

Secondo il FFI cookbook, è possibile definire

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

che viene poi utilizzato come

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

Il alignment parola chiave dovrebbe essere disponibile in ghc> 7.2.1, quindi non avrebbe bisogno per definirlo da solo con nuovi ghc.

Problemi correlati