C 静态存储动态存储
首先,我们可以把程序所占的内存空间分为三个部分:(可以根据静态资源区、栈区、堆区来划分)
静态存储:程序运行期间由系统分配固定得到存储空间(栈);
动态存储:开发者根据自身需要进行动态分配的存储空间(堆)。
静态储存典型的就是我们函数内部的形参、局部变量,在函数得到生命周期结束之后,这些变量所占的内存也会被释放掉。
eg:
int* StackMemory() { int stackmemory; int* stackptr = nullptr; stackptr = &stackmemory; printf("ptr1=%d", stackptr); return stackptr; }
StackMemory函数的调用结束后,StackMemory所占的内存也会相应的释放。
如果我们此时使用StackMemory返回给我们的指针所指的地址是不安全的。
void main() { int* stackprt; stackprt = StackMemory(); *stackprt = 100; printf("ptr2=%d", stackprt); }
想要StackMemory返回的地址是安全的,这里就要用到动态分配存储空间,用一个新函数Dynamic。
int* Dynamic() { //(int*)malloc(4);也可以 int* dy = new int(10); printf("ptr1=%d", dy); return dy; }
用new、malloc都可以创建动态存储。现在我们调用Dynamic返回的地址就是安全的了。
void main() { int* stackprt; stackprt = Dynamic(); *stackprt = 100; printf("ptr2=%d", stackprt); free(stackprt); }
注意:动态分配的存储需要我们手动来释放,不然会造成内存的泄露,释放内存调用free(它跟malloc都在malloc.h里)方法。