本文由大魏网转载(、 )
今天遇到了这个问题,想搞的彻底些,查了些资料,还不太完善,望指教。
在c++中
栈中存放的是局部变量,函数的形参等东西,是程序自动为我们分配的,类似数据结构中的栈,先进后出
堆中存放的是new出来的东西,内存的申请与释放需要程序员手动完成,类似于数据结构中的链表
struct Student
{
int num;
char name[10];
};
Student *stu = new Student;
那么stu被分配在了栈中,而堆中则分配了4+10个字节吧,stu指向这个内存的首地址。
Student stu;在这句话中stu被分配在了栈中,那么他占据多少内存呢,是4+10个?还是语法错误,因为没有初始化?
自由存储区存放malloc分配的内存,是c语言中的用法,类似于堆。
静态区存放static申明的变量,不论是局部的或是全局的,不能用extern关键字来申明为其他区域。
常量区存放const申明的常量,给数据不可以改变。
在java中
同样是这些东西
Student stu=new Student;
stu存放在栈中,new出来的东西存放在堆中,stu这个引用指向了student。这些东西不必程序员去手动释放。
其他东西的存放类似于c++;
那么Student stu;
是否也是错误呢?