点击或拖拽改变大小

Functions.MemCAlloc 方法

X#
分配指定大小的静态内存缓冲区。

命名空间:  XSharp.RT
程序集:  XSharp.RT (在 XSharp.RT.dll 中) 版本:2.22 GA
语法
 FUNCTION MemCAlloc(
	wItems AS DWORD,
	wBytes AS DWORD
) AS IntPtr
查看代码

参数

wItems
类型:UInt32
要分配内存的项目数量。
wBytes
类型:UInt32
每个项目要分配的字节数。

返回值

类型:IntPtr
如果有足够的内存可用,则返回指向分配空间的指针;否则,返回 NULL_PTR。您应该始终检查 MemCAlloc() 的返回值以确保分配成功。
备注
MemCAlloc() 用于一次性分配多个项目的空间。
分配的内存被定义为静态,因此不会被垃圾收集器移动。由 MemCAlloc() 分配的空间由 MemFree() 释放。
提示 提示:
此函数允许直接操作内存位置,应极为小心使用。
备注
提示 提示:
静态内存函数(MemAlloc、MemSet 等)仅用于兼容性。 在大多数情况下,静态内存块可以(并且应该)用字节数组替换。
运行时中的许多函数,如接受内存块作为参数的低级 IO 函数,现在有接受字节数组作为参数的重载。
我们建议您使用这些重载,因为它们的性能稍微更好。
示例
此示例使用 MemCAlloc() 为十个长整型分配空间:
X#
1LOCAL ptrLongs AS PTR
2ptrLongs := MemCAlloc(10, 4)
我们还可以使用以下方式代替硬编码 4:
X#
1ptrLongs := MemCAlloc(10, _SizeOf(LONG))
下一个示例使用 MemCAlloc() 为五个实例的定义结构分配空间:
X#
 1STRUCTURE StatInfo
 2    MEMBER wAverageHit AS DWORD
 3    MEMBER wMaxHit AS DWORD
 4    MEMBER wMinHit AS DWORD
 5FUNCTION MemCAlloc2() AS VOID
 6    LOCAL ptrStruct AS PTR
 7    ptrStruct := MemCAlloc(5, _SizeOf(StatInfo))
 8    IF ptrStruct = NULL_PTR
 9        ? "分配失败"
10    ELSE
11        MemFree(ptrStruct)
12    ENDIF
参见