一、起源
C++内存分成5个区,分别是堆、栈、*存储区、全局/静态存储区和常量存储区。
但这个*存储区这么一听还是模模糊糊的,和堆好像是一样的,还有同学说起这个问题。
二、个人理解
关于*存储区和堆的区别,我是这样理解的
(1)字面意思是“*存储”区,那就是可以随便
malloc它,随后我们把malloc来的内存,想怎么用就怎么用,想存啥就存啥,反正最后别忘了free了就行了。这个区我理解成*存储区,“*”嘛。
(2)堆区和栈区也算是它的转换过去的一部分,不过肯定不属于它,非要区分,那堆和栈可以在*存储区上*扩展,直到把它消耗完。
(3)就是*存储区嘛,就是我们可以“随便用”的那块嘛,就是“不是堆但我们可以随便用”它的那块。我联想的是:我们new从堆上操作,而堆再在*存储区上去malloc扩展自己,相当于更底层一点。如果我们非要操作这个底层,那我们自己就malloc它。
(4)我的再一个图形化的理解是:堆相当于一个内核,而*存储区相当于一个底层的驱动。
(5)都是用户来申请释放,认为相同也没啥问题。这也不是C++标准的规定,只是一个理论性的字面总结而已。
大概理解就这么多,有什么错误的地方,还希望指正或对骂。