OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4098|回复: 2

(首发)UOL测试版开发语言之内存管理(第4节)

[复制链接]

45

主题

115

帖子

1

精华

版主

Rank: 7Rank: 7Rank: 7

积分
679
金钱
679
注册时间
2013-9-23
在线时间
95 小时
发表于 2013-11-5 17:55:25 | 显示全部楼层 |阅读模式

UOL虚拟机是通过栈和堆的管理对内存进行分配的。局部变量通常在栈中申请空间,而对象和数组的建立则是在堆中申请空间。由于栈的工作原理是当方法生命周期结束后栈即被销毁,所以栈的内存分配相对比较安全,然而堆的申请就相对比较不安全。UOL虚拟机不像JAVA具有垃圾回收机制,所以使用者必须手动销毁对象或数组。如果对象或者数组忘记销毁,很有可能造成内存泄漏的问题。

 

UOL语言中,对象和数组的申请都是用关键字new来实现的,这跟javaC++方式差不多。例如:

 

//在堆中申请大小为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来改变栈的大小。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-5 18:13:22 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2013-11-5
在线时间
0 小时
发表于 2013-11-5 18:37:51 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-9 15:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表