現在、マルチスレッドコードを試しています。そのパフォーマンスは、2つのデータメンバーが同じキャッシュラインを共有しているかどうかによって異なります。「drop_with_repr_extern」の警告を細かく抑制する方法を教えてください。
偽の共有を避けるために、私はを使用して、Rustコンパイラを使わずにstruct
のレイアウトを指定する必要があります。しかし、これと同じstruct
もDrop
を実装しているため、コンパイラはrepr(C)
とDrop
の「非互換性」について警告します。
しかし、この無駄な警告を黙らせようとすると、私のことを証明できませんでした。ここで
はreduced exampleです:#[warn(drop_with_repr_extern)]
を発する
#[repr(C)]
#[derive(Default, Debug)]
struct Simple<T> {
item: T,
}
impl<T> Drop for Simple<T> {
fn drop(&mut self) {}
}
fn main() {
println!("{:?}", Simple::<u32>::default());
}
。
私は#[allow(drop_with_repr_extern)]
を指定して試してみました:
struct
- で
impl Drop
- で
mod
でとどちらも働きました。クレートレベルの抑圧だけが機能しましたが、これはかなり重いです。
これは、この警告を抑制する、より詳細な方法ですか?
注:2つのデータメンバーが異なるキャッシュラインに分散されていることを確認するには、歓迎します。しかし、彼らは自分自身で答えを構成することはありません。
私はこれが糸くずの製造方法によるものであることを鋭敏にしています。私のPCにアクセスすると、コードが表示されます。 – llogiq