栈
栈由操作系统分配管理,也就是它是规整的,内存的大小在申请之后不会发生变化。因此,它不会出现碎片化,并且读取速度非常的快
例如:经常声明的局部变量,一些基本数据类型,如int ,double, char 等,这些数据在声明的时候,内存的大小已经确定,它们会被存放到栈中。使用栈的好处是,不需要管理内存的释放
堆
堆的分配非常自由,它是由程序员自己去分配的,比如程序员考虑到某些情况需要更多的内存,它就可以在堆上面申请一个足够大的内存。除此之外,内存的分配非常自由,它并不要求是连续的内存,只要有空间,都可以被拿来分配。不过这样就会导致产生很多碎片,不利于高速读取,因此堆的操作的速度要比栈慢很多。堆主要存放的是大小不固定的内存结构,因此,我们的数组和结构体经常被存放到堆上。对于全局变量我们也会放到堆上,因为它需要可以被任何地方访问,并且不能像栈一样被操作系统回收。
以上代码是错误的,因为创建的是一个基于栈的变量,而函数一旦结束,就超出了作用域,栈上的变量会自动销毁