在内存利用方面,OOP语言与过程语言的区别如何

时间:2016-10-10 16:58:59

标签: object memory memory-management operating-system procedural-programming

我想了解OOP编程语言在内存利用方面与程序语言的区别。更具体地说,我们假设我们正在讨论JavaC作为示例:

  1. 对象是否自动存储在heap中,而在过程语言中,您必须明确定义堆使用情况,例如在C malloc中?
  2. 如果我用C编写程序,OS将创建该程序的虚拟页面,包括堆和堆栈空间。如果我在代码中不使用malloc,这意味着我的程序没有使用为其分配的堆,这是正确的吗?
  3. 由于Stack用于存储局部变量和函数调用地址,如果程序用尽堆栈空间,OS会扩展该程序的分页大小,或者它只使用堆作为延期?

1 个答案:

答案 0 :(得分:0)

  

对象是否自动存储在堆中,而在过程语言中,您必须显式定义堆使用情况,例如在C malloc中?

这取决于语言。一些(例如Object Pascal)需要在堆上分配所有“对象”。其他的,比如C ++,允许对象存在于静态,堆或堆栈中。这两种方法都有优点和缺点。

  

如果我用C编写程序,OS将创建该程序的虚拟页面,包括堆和堆栈空间。如果我在代码中不使用malloc,这意味着我的程序没有使用为它分配的堆,这是正确的吗?

可能不是。运行时库可能会使用背后的堆。

  

由于Stack用于存储局部变量和函数调用地址,如果程序用尽堆栈空间,操作系统是否扩展了该程序的分页大小,或者它只是将堆用作扩展?

这取决于操作系统。通常,如果可以,OS将尝试扩展堆栈。 t不会使用堆来扩展堆栈。堆栈通常由两端的不可访问页面保护(就像捕获空指针的第一页一样)。耗尽堆栈的可能结果是某种访问违规。