UOL虚拟机是通过栈和堆的管理对内存进行分配的。局部变量通常在栈中申请空间,而对象和数组的建立则是在堆中申请空间。由于栈的工作原理是当方法生命周期结束后栈即被销毁,所以栈的内存分配相对比较安全,然而堆的申请就相对比较不安全。UOL虚拟机不像JAVA具有垃圾回收机制,所以使用者必须手动销毁对象或数组。如果对象或者数组忘记销毁,很有可能造成内存泄漏的问题。
在UOL语言中,对象和数组的申请都是用关键字new来实现的,这跟java和C++方式差不多。例如:
//在堆中申请大小为100个字符的字符串对象
String name = new String(100);
//在字符串池中创建一个字符串对象
String name = “hello world”
//在堆中申请数组
int number = new int[100];
//数组销毁
del number;
//对象销毁
system sys = new system();
//del 为销毁的关键字
del sys;
由于很多C语言使用者习惯在函数中声明数组,UOL语言也顺便支持局部变量数组的声明。局部数组变量申请是在栈中,所以一旦方法结束后,局部数组自动销毁。例如:
public void add()
{
//局部数组的声明,类似C语言
int a[10];
}
由于局部数组涉及到栈分配,所以在虚拟机配置中一定要注意栈的大小设置。在vm.h中可以通过改变#define STACK_SIZE来改变栈的大小。 |