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

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

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

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

質問は、以上です。

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

.NET
.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
62 件の質問
VB
VB
.NET Framework 上に実装される、Microsoft によって開発されたオブジェクト指向プログラミング言語。 旧称 Visual Basic .NET。
10 件の質問
0 件のコメント コメントはありません
{count} 件の投票

承認済みの回答
  1. gekka 9,421 評価のポイント 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 件の追加の回答

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

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。