2016-07-13 34 views

回答

3

你的答案是:

  1. 沒有
  2. 沒有

#[repr(C)]不作結構「安全FFI」,它保證了內存中表示將原樣和編譯器不會嘗試在封面下優化它們的空間/效率。這是偶然的,安全FFI也是需要的。

2

將結構傳遞給C代碼當然不安全。還有一些注意事項在documentation,包括:

  • DSTS,元組和標籤聯合是不是在C概念,因此從來都不FFI安全

    你有沒有保證有關無論這些是否在Vec。另外,由於Vec是不透明的。

  • 如果類型會有任何下降的標誌,他們仍然會被添加」

    再次,Vec可能有一些。

在任何情況下,爲它在接收的C代碼中有任何意義,您還需要在C中聲明您的結構;並且由於Vec<String>是不透明的,因此沒有合理的方法來執行此操作。我認爲擁有#[repr(C)]的原因是重現數據以匹配您想與之互操作的現有C API;不以某種方式直接暴露內部的鏽類型爲C.

相關問題