CALLOCATE
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgCallocate
- 最后更新: 2021-06-16
CALLOCATE — 从空闲存储区分配并零初始化内存
语法
vb
declare function Callocate cdecl ( byval num_elements as uinteger, byval size as uinteger = 1 ) as any ptr用法
vb
result = Callocate( num_elements [, size ] )参数
| 参数 | 说明 |
|---|---|
num_elements | 要分配内存的元素数量。 |
size | 每个元素的字节大小。可选参数,默认值为 1。 |
返回值
- 成功时:返回指向已分配内存块的指针。
- 失败时:返回空指针(
0)。
说明
Callocate 从空闲存储区为 num_elements 个、每个 size 字节的元素分配内存,并将整个内存块初始化为零。
由于内存已零初始化:
- 可直接用于
String变量或包含字符串的 UDT,因为字符串描述符在使用前已初始化为零。 - 可直接用于
ZString或WString缓冲区,因为数据将以空终止符开始的空字符串形式存在。
若不需要零初始化,请改用 Allocate(更快,跳过清零步骤)。
使用 Callocate 分配的内存最终必须通过 Deallocate 释放,否则会造成内存泄漏。
示例
vb
' Allocate space for 10 integers, zero-initialized
Dim p As Integer Ptr = CAllocate(10, SizeOf(Integer))
' Fill with values
For index As Integer = 0 To 9
p[index] = (index + 1) * 10
Next
' Print values
For index As Integer = 0 To 9
Print p[index];
Next
Print
' Free the memory
Deallocate(p)输出:
10 20 30 40 50 60 70 80 90 100方言差异
- 在
-lang qb方言中不可用,除非使用别名__Callocate引用。
与 QB 的差异
- 这是 FreeBASIC 扩展功能;QB 没有等效函数。
另请参阅
- KeyPgAllocate —
Allocate:分配未初始化内存 - KeyPgReallocate —
Reallocate:调整现有分配的大小 - KeyPgDeallocate —
Deallocate:释放已分配内存