VisualFreeBasic代码_内存

2026-1-21 / 0 评论 / 57 阅读

在编程过程中,需要经常和内存打交道,所有的变量,所有的操作,都在内存中进行。
当然我们也可以直接对内存管理。

使用动态内存

Deallocate  释放以前赋值的内存
Allocate    从空闲存储器赋值一块内存
CAllocate   从空闲存储器为一定数量的元素赋值内存,并清除内容
Reallocate  为现有的预留内存块重新赋值存储空间

操作例题:
申请 10个字节大小的内存

Dim p As any Ptr = CAllocate(10)

使用完成后,需要回收内存,不然会发生内存泄漏问题,软件会越占内存越多。

Deallocate p

Allocate和CAllocate的区别
Allocate一个获取内存后,内存中原来有什么数据,就什么数据,你永远无法确定是什么内容,而CAllocate,获取内存后,多了一步清空数据操作。

其它内存操作

  • Clear 清除或初始化一些内存
  '创建一个包含100个元素的数组
Dim array(0 To 99) As Integer
'将数组的内容清除为0,从第一个元素开始
Clear array(0), , 100 * SizeOf(Integer)
'赋值20个字节的内存
Dim As Byte Ptr p = Allocate(20)
'将前十个字节中的每一个设置为0
Clear *p, 0, 10
'将接下来的十个字节中的每一个设置为42
Clear p[10], 42, 10
'检查赋值的字节的值
For i As Integer = 0 To 19
    Print i, p[i]
Next
'释放内存
Deallocate p
  • Swap 交换两个变量的值(直接交换指针,不交换数据,速度快)
'使用交换命令2个数字:
Dim a As Integer, b As Integer
Input "输入一个数字:"; a
Input "输入另一个数字:"; b
If a > b Then Swap a, b
Print "数字按升序排列:"
Print a, b
  • Poke 将值赋值给内存中的位置。(写入内存)
Dim i As Integer, p As Integer Ptr
p = @i
Poke Integer, p, 420
Print Peek(Integer, p)
会产生输出:
420
  • Peek 在内存中的地址获取任意类型的值(读取内存)
Dim i As Integer, p As Integer Ptr
p = @i
Poke Integer, p, 420
Print Peek(Integer, p)
将产生输出:
420
  • SAdd 返回一个指向字符串变量数据的指针
Dim s As String
Print SAdd(s)
s = "你好"
Print SAdd(s)
s = "abcdefg,1234567,54321"
Print SAdd(s)

远程内存读写

就是读写其它软件(不是自己进程)的内存

  • 读进程内存
Dim by(1023) as ubyte
MEM_Get_ANY(进程ID,读地址,@by(0),1024 )
  • 写进程内存
Dim by(1023) as ubyte
MEM_Write(进程ID,地址,@by(0),1024)

评论一下?

OωO
取消