Linux下c的进一步学习

1.数据存储区定义及其特点
1.1堆区
由malloc动态分配内存,free释放的存储在堆区,由new分配,delete释放的存储在自由存储区,自由存储区一般来讲不仅包括堆区,还可能包括全局存储区的未分配部分。
1.2栈区
就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。栈区大小固定,一般为1M,地址向下扩展。(百度参考)
1.3静态数据区
全局变量和静态变量被分配到同一块内存中,都在全局数据区,在以前的 C 语言中,全局变量又分为初始化的和未初始化的(初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过 void* 来访问和操纵,程序结束后由系统自行释放),在 C++ 里面没有这个区分了,他们共同占用同一块内存区。
1.4代码段
是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。(百度参考)
堆区是自己生成,自己释放;栈区,全局数据区,代码段是由系统生成,系统释放。
2.数据的基本算法
+,-,*,/(由此做了个简易的计算器)
3.比较运算符
( )?( ):( )
?前面为真执行?后第一个( )表达式,反之执行第二个( )表达式内容
4.位运算
4.1 <<
a<<b 即是a左移b位(在二进制表示下)
4.2 >>
a>>b 即是a右移b位(在二进制表示下)
5.逗号表达式
a=(x=3,4+5,x+4)
表达式的值等于最后一个逗号后的表达式的值,即是a=x+4=3+4=7
6.数据的存储类型
6.1 const
其值不想修改,只读变量
6.2 register
直接将值储存在寄存器中,并且值不能超过cpu的最大值
6.3 extern
声明全局变量
6.4 volatile
每个值从内存取。
例如:
volatile int i=10;
j=i;
j的值从内存中取。
6.5 auto
动态分配内存,数据存储在动态存储区,函数调用结束自动释放这些存储空间。
6.6 static
声明静态变量,相对应的类型储存在静态数据区,一般数据只初始化一次,具有记忆功能。

猜你喜欢

转载自blog.csdn.net/qq_42579119/article/details/84256361