Tim*_*ews 8 haskell ffi alignment
如果我可以在头文件中访问C结构定义但想要手动定义我的可存储实例而不使用像hsc2hs这样的东西,我如何找到对齐值?
错误的对齐值是否会导致崩溃或仅影响性能?
编辑:抱歉,我误解了这个问题,并且认为你在问hsc2hs,而不是没有.不正确的对齐可能导致错误的数据并导致崩溃(考虑你是否正在编组结构数组),所以你真的应该使用便携式的东西.
根据FFI食谱,您可以定义
#let alignment t = "%lu", (unsigned long)offsetof(struct {char x__; t (y__); }, y__)
Run Code Online (Sandbox Code Playgroud)
然后用作
instance Storable Struct where
alignment _ = #{alignment my_struct}
sizeOf _ = #{size my_struct}
Run Code Online (Sandbox Code Playgroud)
该alignment关键字应该在ghc> 7.2.1中可用,因此您不需要使用非常新的ghc来自己定义它.
__alignof__ (type) 使用 gcc,您可以找到每个more的对齐方式。然而,该值取决于体系结构,因此为了可移植性,您应该通过宏来确定每台计算机上的对齐方式。这意味着 hsc2hs 可能是更好的方法。
我认为错误的对齐可能会导致崩溃,但我不确定。
| 归档时间: |
|
| 查看次数: |
707 次 |
| 最近记录: |