动态内存和静态内存浅析

一.计算机内存分配

  1. 低地址空间被底层的操作系统占用
  2. 高地址空间内存被分为四个部分:代码段、数据段、堆空间、栈空间。
二.动态内存
由于堆空间只能在程序运行时被使用,因此堆空间也被称动态内存。另外,动态内存只能在程序运行时通过指正
对分配给各种变量、字符串和数组( 只能通过指针来访问堆空间)。动态分配内存需要使用函数:malloc(),calloc()和realloc().使用完后还要使用free()
函数将内存归还。
三.静态内存
编译期间分配的内存被称为静态内存。如:数据段、栈空间。
四.二者的区别
  1. 静态内存程序访问速度快,可以提高程序的性能。
  2. 堆空间上,变量的值保存在堆空间二地址(指针)保存在栈中。
  3. 在静态内存上的变量使用完毕后系统自动回收,动态内存上的变量需要程序要手动释放。
  4. 静态内存容量有限,而动态内存可以在运行时增长,并且可以申请很大的内存。
五.函数malloc()
该函数向堆空间申请指定字节数的空间。被定义在头文件 中。
该函数的返回类型为 void*。值得注意的是void*类型可以转换成任意类型的其它指针。
给个实例:int *pv;
pv=(int *)malloc(sizeof(int));
给内存块中写信息:scanf("%d",pv);
当申请的内存使用完毕后使用free()函数释放内存:
free(pc);
六.函数realloc()
用于修改或从新分配一块已经由malloc()申请的内存。
pv=(int *)realloc(pv,4);
七.函数calloc()
用于分配若干个大小相同的内存块。
int *p;
p=(int *)calloc(20,sizeof(int));
分配20个大小为4字节的内存。


你可能感兴趣的:(动态内存和静态内存浅析)