关于heap(堆)和stack(栈)的问题:heap(堆):是由
程序员自己分配和回收,若其在程序结束时,未回收时则由操作系统来完成回收工作。
stack(栈):是由操作系统来分配和回收的。
它们之间有缺点的比较:
heap 一般比较灵活,且
内存不要求连续,但是容易造成内存泄露;
stack 一般比较固定,且内存一般分配是连续的,不容易引起内存泄露。
它们都不同于数据结构中的
堆栈结构,请区分
理解。
关于volatile
?volatile一般较多的应用在嵌入式系统中,因为RTOS不要求编译器对其进行优化。
如果不将其声明的话,会将变量进行自动优化,即:它不是每一次都从内存空间的实际地址上读取信息,而是 在多次读取后,将它copy一份,当将它赋值给一个另外的变量值时,直接将这个复本给它,从而不能保证它的值是否正确。