apo*_*pse 7 c# memory unmanaged
我Marshal.GlobalHAlloc用来分配内存.正如文档所说:"此方法从Kernel32.dll公开Win32 LocalAlloc函数." GlobalAlloc的文档说它将是8字节对齐,但LocalAlloc没有说任何关于对齐.
例如,我想分配1024个字节并确保它与16对齐.当我分配1024 + 16个字节然后检查指针%16时它会工作吗?如果结果为0则意味着内存对齐,当它不为0时,我只是增加指针以符合我的期望.问题是我不知道,如果我有对齐指针它真的在物理内存中对齐?
Han*_*ant 12
所有Windows堆分配器都按8对齐.您可以通过过度分配和调整指针来解决这个问题,如下所示:
var rawptr = Marshal.AllocHGlobal(size + 8);
var aligned = new IntPtr(16 * (((long)rawptr + 15) / 16));
// Use aligned
//...
Marshal.FreeHGlobal(rawptr);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3409 次 |
| 最近记录: |