我想了解OOP编程语言在内存利用方面与程序语言的区别。更具体地说,我们假设我们正在讨论Java
和C
作为示例:
heap
中,而在过程语言中,您必须明确定义堆使用情况,例如在C malloc
中?OS
将创建该程序的虚拟页面,包括堆和堆栈空间。如果我在代码中不使用malloc
,这意味着我的程序没有使用为其分配的堆,这是正确的吗?Stack
用于存储局部变量和函数调用地址,如果程序用尽堆栈空间,OS
会扩展该程序的分页大小,或者它只使用堆作为延期?答案 0 :(得分:0)
对象是否自动存储在堆中,而在过程语言中,您必须显式定义堆使用情况,例如在C malloc中?
这取决于语言。一些(例如Object Pascal)需要在堆上分配所有“对象”。其他的,比如C ++,允许对象存在于静态,堆或堆栈中。这两种方法都有优点和缺点。
如果我用C编写程序,OS将创建该程序的虚拟页面,包括堆和堆栈空间。如果我在代码中不使用malloc,这意味着我的程序没有使用为它分配的堆,这是正确的吗?
可能不是。运行时库可能会使用背后的堆。
由于Stack用于存储局部变量和函数调用地址,如果程序用尽堆栈空间,操作系统是否扩展了该程序的分页大小,或者它只是将堆用作扩展?
这取决于操作系统。通常,如果可以,OS将尝试扩展堆栈。 t不会使用堆来扩展堆栈。堆栈通常由两端的不可访问页面保护(就像捕获空指针的第一页一样)。耗尽堆栈的可能结果是某种访问违规。