VB.netでC言語の_aligned_malloc()と同じことをしたい。

huahi11115 640 評価のポイント
2024-10-01T03:27:41.8766667+00:00

dim a1() as byte={0} として、a1(0)のアドレスを4096の倍数に設定したいです。

このような機能は、.Net Frameworkにありますか。

質問は、以上です。

よろしくお願い致します。

開発者テクノロジ | .NET | その他
開発者テクノロジ | .NET | その他

.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。 特定のカテゴリに適合しないその他のトピック。

開発者テクノロジ | VB
開発者テクノロジ | VB

Microsoft が開発した、.NET で使用できるオブジェクト指向のプログラミング言語。

0 件のコメント コメントはありません

質問作成者が受け入れた回答
gekka 14,551 評価のポイント MVP ボランティア モデレーター
2024-10-01T03:59:52.6733333+00:00

VBにそのような機能はありません

Sub Main()
    Dim a1() As Byte
    Using temp As System.IDisposable = _aligned_malloc(a1, 0, 4096)
        Console.WriteLine(temp)
    End Using
End Sub

Private Function _aligned_malloc(ByRef a1 As Byte(), size As Integer, alignment As Integer) As IDisposable
    Do While True
        a1 = New Byte(size) {}
        Dim h = System.Runtime.InteropServices.GCHandle.Alloc(a1, System.Runtime.InteropServices.GCHandleType.Pinned)
        Dim p = h.AddrOfPinnedObject()
        If (p.ToInt64() Mod alignment) = 0 Then
            Return New Temp(h, p)
        Else
            h.Free()
        End If
    Loop
End Function

Class Temp
    Implements System.IDisposable

    Public Sub New(h As GCHandle, p As IntPtr)
        Me.h = h
        Me.p = p
    End Sub

    Private h As System.Runtime.InteropServices.GCHandle
    Private p As IntPtr

    Public Sub Dispose() Implements IDisposable.Dispose
        Me.h.Free()
    End Sub

    Public Overrides Function ToString() As String
        Return p.ToString("X")
    End Function
End Class

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。

0 件の追加の回答

並べ替え方法: 最も役に立つ

お客様の回答

質問作成者は回答に "承認済み"、モデレーターは "推奨" とマークできます。これにより、ユーザーは作成者の問題が回答によって解決したことを把握できます。