堆与栈
关于堆和栈的问题,对于熟悉C++的同学来说可能理解的比较清楚,但是由于Java的一切对象都是在堆上,因此有时候可能反而会比较迷惑,比如:
为什么要分堆和栈?
堆和栈的区别是什么?
为什么堆是线程共享的而栈不是?
很多懂一点Java的人甚至是懂一点编程的人都知道内存一般分为堆和栈,栈由系统进行关系,而堆由程序员自己管理,...balabala,基本任何一本语言基础书都会提到这些特点,但是你有想过为什么吗?
为什么要分堆和栈
之所以要区分堆和栈,是由于程序需要两种不同特性的内存形似而确定的。在C++中,新建一个对象有两种方式,静态分配和动态分配,
静态分配
一般来说,静态分配用于初始化已知对象大小的时候,比如int a[10];
如果我们能够确定这个数组是10个,我们可以使用这种方式。这种方式所需要的内存在编译期间即可确定,因此操作系统便可以预先确定所指定大小内存给变量,