第七天(c内存)

来源:互联网 发布:机顶盒 电视直播软件 编辑:程序博客网 时间:2024/05/22 09:47

内存,程序在内存中运行。(进程)


栈:存放的是值类型数据,前提是局部变量,是由系统分配和释放的,效率高,优先使用栈空间,优先使用局部变量。两个函数中相同名字的常量在栈中是不会冲突的,因为存放的区域并不一样。



堆:存放的是引用类型的,用户自己分配,自己释放malloc---free

void *malloc(分配空间大小);

int *p=malloc;

free(p);//不会对内存进行操作。free完之后就是把空间释放了然后可以再存储,不free的话原本的数据是不会改变的。


数据区:全局变量,常量。存储类型(静态)static,数据段的数据一直存在直到程序结束。

static int a=100;全局作用域

void fun(){

static int a =200;函数作用域

a++;

printf("%d\n",a);

}

a,b都存储在数据段,静态变量只初始化一次。

fun();a=201;

fun();a=202;

fun();a=203;





自动,外部,寄存器(多文件开发)

auto   extern   register

auto--默认

extern---多个文件共享一个变量。全局同名变量

如果加上static限制了变量在本文件中使用

多文件编译:gcc -o a.c  b,c

register ---寄存器变量 (速度快,资源少,不允许取寄存器变量地址)寄存器变量不一定放在寄存器。

register int num=0; (是否放在寄存器是由寄存器决定,申请为寄存器变量就不能用取地址符取地址)

一个变量被循环重复利用的次数很多的时候就定义为寄存器变量。



预处理(头文件,调试)

头文件(避免头文件重复加载)

 #ifndef xxx

#define xxx

文件文件内存

#endif  //xxx


//必须一行完成(如果写不完就用换行符\换行)

#define Debug(x)  printf("%s-%d-%s\n",_FILE_,_LINE_,x)

_LINE_表示行


定义常量

#define  MAXNUM 100;


跨平台:(在不同平台中的代码不一样,根据平台选择代码)

#define IOS


#ifdef IOS

Debug("ios");

#else

debug("linux");

#endif

return 0;


#if 0     //if后面必须是真假值,不能写其他

屏蔽代码段

#endif


自定义数据类型(把已有的数据类型定义别名)

typedef   unsigned int   uint_32;

作用是增强程序的可读性。

typedef  int(*fun)(int);  可以用fun定义一个指针,fun p;(p就是一个函数指针);






0 0
原创粉丝点击