指针、内存和字节
来源:互联网 发布:网络信息安全培训班 编辑:程序博客网 时间:2024/06/05 21:44
指针指向字符串常量,不能给常量赋值。字符常量是不能被重新赋值的。
常量区也是在栈上。在函数体中定义的变量通常在栈上,用malloc、calloc、realloc等分配内存的函数分别得到的就是在堆上。
指针本身存在于栈中,而所指向的对象则不一定。
二.在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区
1.栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。
2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
3.自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
4.全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
5.常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)
2.堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
3.自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
4.全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的,在C++里面没有这个区分了,他们共同占用同一块内存区。
5.常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改)
堆和栈的对比
从以上知识可知,栈是系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活;而栈是函数库 提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一。不 同堆分配的内存无法互相操作。栈空间分静态分配和动态分配两种。静态分配是编译器完成的,比如自动变量(auto)的分配。动态分配由alloca函数完 成。栈的动态分配无需释放(是自动的),也就没有释放函数。为可移植的程序起见,栈的动态分配操作是不被鼓励的!堆空间的分配总是动态的,虽然程序结束时 所有的数据空间都会被释放回系统,但是精确的申请内存/ 释放内存匹配是良好程序的基本要素。
从以上知识可知,栈是系统提供的功能,特点是快速高效,缺点是有限制,数据不灵活;而栈是函数库 提供的功能,特点是灵活方便,数据适应面广泛,但是效率有一定降低。栈是系统数据结构,对于进程/线程是唯一的;堆是函数库内部数据结构,不一定唯一。不 同堆分配的内存无法互相操作。栈空间分静态分配和动态分配两种。静态分配是编译器完成的,比如自动变量(auto)的分配。动态分配由alloca函数完 成。栈的动态分配无需释放(是自动的),也就没有释放函数。为可移植的程序起见,栈的动态分配操作是不被鼓励的!堆空间的分配总是动态的,虽然程序结束时 所有的数据空间都会被释放回系统,但是精确的申请内存/ 释放内存匹配是良好程序的基本要素。
在C语言中:char a = 'a'; sizeof(char) = 1.sizeof(a) = 1,sizeof('a') = 4;
在C++语言中:char a = 'a'; sizeof(char) = 1.sizeof(a) = 1,sizeof('a') = 1; //特别注意
32位中char =1,short int =2 ,int =4, long int =4,long long int =8,char* = 4,float = 4,double = 8;
64位中char = 1,short int = 2,int = 4,long int = 8,long long int = 8,char* = 8;float = 4,double = 8;
0 0
- 指针、内存和字节
- 字节对齐和内存管理 .
- 关于指针和内存
- C#和内存指针
- C#和内存指针
- 指针和内存判断
- C#和内存指针
- C#和内存指针
- 指针和内存
- 指针和动态内存
- 指针和内存(01)
- 指针和内存(02)
- 指针和内存
- 指针和内存
- 指针和内存
- 指针和内存
- 指针和内存错误
- 指针和内存管理
- STL各种容器迭代器失效的时机
- rsyslog的relp转发及自定义端口号问题
- redis入门--简单事务
- css 禁止html元素被选中
- Mac Apache-spark 单机安装
- 指针、内存和字节
- JAVA基本语法
- cassandra运维总结(不定期更新)
- MVC、MVP、MVVM深入理解与使用
- 3D转换
- sklearn:选择正确的模型
- 数据库SQL
- sizeof使用
- RTP协议全解析(H264码流和PS流)