程序内存布局,static

1.include一个文件,相当于把那个文件的代码复制到include的地方;

2.程序在内存中的分布:动态区(栈和堆)、静态区


代码段(.text),也称文本段(Text Segment),存放着程序的机器码和只读数据,可执行指令就是从这里取得的。如果可能,系统会安排好相同程序的多个运行实体共享这些实例代码。这个段在内存中一般被标记为只读,任何对该区的写操作都会导致段错误(Segmentation Fault)。

数据段,包括已初始化的数据段(.data)和未初始化的数据段(.bss),前者用来存放保存全局的和静态的已初始化变量,后者用来保存全局的和静态的未初始化变量。数据段在编译时分配。

(Heap):用来存储程序运行时分配的变量。堆的大小并不固定,可动态扩张或缩减。其分配由malloc()、new()等这类实时内存分配函数来实现。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free          等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减) 堆的内存释放由应用程序去控制,通常一个new()就要对应一个delete(),如果程序员没有释放掉,那么在程序结束后操作系统会自动回收。

(Stack)是一种用来存储函数调用时的临时信息的结构,如函数调用所传递的参数、函数的返回地址、函数的局部变量等。 在程序运行时由编译器在需要的时候分配,在不需要的时候自动清除。


3.全局变量:定义在所有函数之外的变量,在程序结束前一直存在。如果想在另一个文件(不是include本文件)中使用全局变量,则另一个文件中必须用extern声明这个变量;

全局变量加static关键词后,则只在本文件内有效;(include一个文件其实还是属于同一文件);

局部变量生命期从声明处开始到作用域结束,加上static后则存在于整个程序运行期间,但仍是局部变量;


4.类的静态成员:独立于任何类的对象,不允许在类内部初始化非常量静态成员。类的实现文件应定义静态成员:int classA::static_val;

静态成员函数:不与任何对象绑定到一起,没有this指针,不能声明为const的;

虽然类的静态成员不属于某个对象,但仍然可以用类的对象、引用或指针来访问静态成员;

成员函数不用通过作用域运算符就能直接使用静态成员;

要想确保对象只定义一次,最好的办法是把静态数据成员的定义与其它非内联函数的定义放在同一文件中,假如所有成员函数都是内联的,则应在类结束分号的后面进行静态成员的定义;

声明和定义!int i;//声明和定义了i         static int i;//只声明没有定义!!!!!坑。。。。。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值