美文网首页C++
代码区、常量区、静态区(全局区)、堆区、栈区

代码区、常量区、静态区(全局区)、堆区、栈区

作者: 萧何爱英语 | 来源:发表于2018-07-25 16:31 被阅读60次

代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的。
常量区:存放常量(程序在运行的期间不能够被改变的量,例如: 10,字符串常量”abcde”, 数组的名字等)
静态区(全局区):静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放
堆区:由程序员调用malloc()函数来主动申请的,需使用free()函数来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏
栈区:存放函数内的局部变量,形参和函数返回值。栈区之中的数据的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理。栈区就像是一家客栈,里面有很多房间,客人来了之后自动分配房间,房间里的客人可以变动,是一种动态的数据变动。

在栈上创建数组时,不能使用含有变量的表达式,如:int a[x+2];错误

原因:在栈上创建数组时编译器编译的时候就需要在栈上分配内存,可是有了变量以后,编译器就无法知道该分配多大的内存空间,故编译器会报错。但是定义一般变量如:int a;编译器会自动识别 int 占多大内存分配给他。

对比:如果是动态创建数组时(也就是在堆上创建数组时)可以出现变量如:new a [x+1];正确;
原因:在堆上创建数组时,编译器不会在编译的时候为它分配内存,而是在程序运行的时候为它分配内存,我们可以知道,程序运行时变量的值就会明确是多少,故动态创建数组时可以出现变量;

堆里的是动态数组,是程序运行过程中动态加载的,而栈不一样,申请数组必须要是确定大小的的数字,在编译时就要确定下来,如果你const int x=7就不会报错

相关文章

  • 19·iOS 面试题·什么是 ARC ?(ARC 是为了解决什么

    前言 对于 iOS 内存分区有:栈区、堆区、静态区、全局区、常量区、代码区。对于静态区、全局区、常量区、代码区,对...

  • OC的五大内存区域

    栈区(stack)堆区(heap)全局区/静态区(BSS段和数据段)常量区代码区(代码段) 1、栈区 栈区:又称堆...

  • 内存管理

    首先,内存分为:栈区、堆区、全局区/静态区(存放全局变量和static静态变量)、常量区(存放字符串常量)、代码区...

  • 无标题文章

    --- ##1.内存分区 > * 堆区 > * 栈区 > * 全局(静态)区 > * 文字常量区 > * 程序代码...

  • 动态内存分配_C语言

    逻辑上的分区 栈区 堆区 静态区 常量区 代码区 代码区,常量区,静态区,堆区,栈区这个排列顺序按照地址由小到大排...

  • 谈谈内存分配

    内存分区: iOS中主要是栈区(stack)、堆区(heap)、全局区/静态区(staic) 、常量区、代码区; ...

  • iOS 内存基础知识及堆区和栈区的区别

    iOS内存区域大致分为;栈区,堆区,全局区(静态区),文字常量区,程序代码区 栈区 栈区(stack)由编译器自动...

  • 【iOS知识体系】OC内存管理

    内存5区域:代码区、常量区、静态区(全局区)、堆区、栈区 函数 字符串: 数组 对象: 都是在堆区 block: ...

  • iOS内存分配五大区:

    iOS内存分配五大区: 栈区,堆区,静态区(全局区),常量区,代码区 动态数据区一般就是”堆栈”,栈是线性结构,堆...

  • 9.内存分配

    内存:数据区 + 代码区 + 堆区 + 栈区 数据区:全局变量 静态变量 常量 (包括用const修饰的...

网友评论

    本文标题:代码区、常量区、静态区(全局区)、堆区、栈区

    本文链接:https://www.haomeiwen.com/subject/kctmmftx.html