docs.unity3d.com
    目次を表示する/隠す

    C#/.NET の System 名前空間のサポート

    Burst は System 名前空間の一部をサポートしており、これらの名前空間を Burst コンパイラーで Burst と互換性のあるバリアントに変換します。

    System.Math

    Burst は、以下のサポートされていないメソッドを除き、System.Math で宣言されるすべてのメソッドをサポートしています。

    • double IEEERemainder(double x, double y)
    • Round(double value, int digits)

    System.IntPtr

    Burst は、静的フィールド IntPtr.Zero と IntPtr.Size を含め、System.IntPtr/System.UIntPtr のすべてのメソッドをサポートしています。

    System.Threading.Interlocked

    Burst は、System.Threading.Interlocked に用意されているすべてのメソッド (例: Interlocked.Increment) のアトミックメモリ intrinsic をサポートしています。

    InterLocked メソッドのソースの場所が自然なアライメントになるようにしてください。例えば、ポインターのアライメントはポインターが参照する型の倍数です。

    [StructLayout(LayoutKind.Explicit)]
    struct Foo
    {
        [FieldOffset(0)] public long a;
        [FieldOffset(5)] public long b;
    
        public long AtomicReadAndAdd()
        {
            return Interlocked.Read(ref a) + Interlocked.Read(ref b);
        }
    }
    

    構造体 Foo へのポインターのアライメントが 8 (long 値の自然なアライメント) である場合、データは自然にアライメントされたアドレスにあるため、a の Interlocked.Read は成功します。しかし、b は成功せず、b のロード時には結果として未定義の動作が発生します。

    System.Threading.Thread

    Burst は、System.Threading.Thread の MemoryBarrier メソッドをサポートしています。

    System.Threading.Volatile

    Burst は、System.Threading.Volatile で提供される Read と Write の非ジェネリックバリアントをサポートしています。

    トップに戻る
    Copyright © 2023 Unity Technologies — 商標と利用規約
    • 法律関連
    • プライバシーポリシー
    • クッキー
    • 私の個人情報を販売または共有しない
    • Your Privacy Choices (Cookie Settings)