C程序中,不同数据在内存中分配说明:\
1)全局变量——内存中的静态存储区
2)非静态的局部变量——内存中的动态存储区——stack 栈
3)临时使用的数据--建立动态内存分配区域,需要时随时开辟,不需要时及时释放——heap堆
4)根据需要向系统申请所需大小的空间,由于未在声明部分定义其为变量或者数组,不能通过变量名或者数组名来引用这些数据,只能通过指针来引用(指针开辟空间,供指针变量名和数组来使用)
说明:当把 void 指针赋值给不同基类型的指针变量(或相反)时,编译系统会对&a自动进行转换,现在只有C99版本不必用户自己进行强制转换,其他版本需要手动转换。例如:
p3=&a;
相当于“p3=(void*)&.a;”,赋值后p3得到a的纯地址,但并不指向a,不能通过*p3输出a的值。
动态分配内存的基本原则\
1)避免分配大量的小内存块。分配堆上的内存有一些系统开销,所以分配许多小的内存块比分配几个大内存块的系统开销大
2)仅在需要时分配内存。只要使用完堆上的内存块,就需要及时释放它,否则可能出现内存泄漏
3)总是确保释放以分配的内存。在编写分配内存的代码时,就要确定在代码的什么地方释放内存
4)在释放内存之前,确保不会无意中覆盖堆上已分配的内存地址,否则程序就会出
现内存泄漏。在循环中分配内存时,要特别小心\