程序内存空间(代码段,数据段,堆栈段)
2018-03-21 21:47
260 查看
点击打开链接
心得:
常量区(常量区中有的常量在常量数据段,有的在代码段,但有的常量如:const修饰的局部常量并没有放在常量区中),例如:局部变量 char a[ ]="hello","hello"字符串常量存在数据段中,而char *b="hello",此时“hello”字符串常量在代码段中,你可以使用 a[1]='w'改变数组a的值,但是你不能通过指针操作即b[1]='w'改变指针指向常量的值,因为hello在代码段中它是常量啊!或者说数组 a[ ]="hello"后在栈上已经分配了空间来存“hello”,这时改变的只是栈上的“hello”当然我们允许的;而局部变量b,虽然我们在栈上给它分配了指针大小的空间,但是这段空间并没有存放"hello",b只是指向了代码段中“hello”,可以理解成只读,所以并不能通过指针改变代码段里的“hello”;const修饰的全局变量,变量在常量区,只读,而const修饰的局部变量并没有放在常量区中,而是存储在栈中,代码块结束时释放,只是此时const常量被设置为只读,不允许改变;此时再说说static,static无论是全局变量还是局部变量都存储在全局/静态区域即数据段中,在编译期就为其分配内存,在程序结束时释放。
心得为本人学习感悟,望网友多多指教。
谢谢大家!
心得:
常量区(常量区中有的常量在常量数据段,有的在代码段,但有的常量如:const修饰的局部常量并没有放在常量区中),例如:局部变量 char a[ ]="hello","hello"字符串常量存在数据段中,而char *b="hello",此时“hello”字符串常量在代码段中,你可以使用 a[1]='w'改变数组a的值,但是你不能通过指针操作即b[1]='w'改变指针指向常量的值,因为hello在代码段中它是常量啊!或者说数组 a[ ]="hello"后在栈上已经分配了空间来存“hello”,这时改变的只是栈上的“hello”当然我们允许的;而局部变量b,虽然我们在栈上给它分配了指针大小的空间,但是这段空间并没有存放"hello",b只是指向了代码段中“hello”,可以理解成只读,所以并不能通过指针改变代码段里的“hello”;const修饰的全局变量,变量在常量区,只读,而const修饰的局部变量并没有放在常量区中,而是存储在栈中,代码块结束时释放,只是此时const常量被设置为只读,不允许改变;此时再说说static,static无论是全局变量还是局部变量都存储在全局/静态区域即数据段中,在编译期就为其分配内存,在程序结束时释放。
心得为本人学习感悟,望网友多多指教。
谢谢大家!
相关文章推荐
- 程序内存空间(代码段、数据段、堆栈段)
- C/C++变量在内存中的分布,堆栈区别,堆栈段,数据段,代码段,附加段
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- 内存空间分几部分:代码段、数据段,栈,堆 (收集整理)
- 内存空间分几部分:代码段、数据段,栈,堆 (收集整理)
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- C语言实现用程序数据段空间模拟内存的动态分配
- No.001内存空间分几部分:代码段、数据段,栈,堆 (收集整理)
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- linux进程的堆栈空间_代码段(指令,只读)、数据段(静态变量,全局变量)、堆栈段(局部变量)、栈
- C程序存储空间布局(一)——各数据段的内存位置
- C程序存储空间布局——各数据段的内存位置
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- 转载:内存空间分几部分:代码段、数据段,栈,堆
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- C程序存储空间布局—各数据段的内存位置
- C语言中内存分布及程序运行中(BSS段、数据段、代码段、堆栈)
- linux下的程序内存分布 代码段,数据段,BSS段,.rodata段,堆,栈
- 数据段、代码段、堆栈段、内存、堆、堆栈、CPU寄存器