内存管理--内存布局

内存管理——内存布局
代码区、常量区、静态区(全局区)、堆区、栈区
const 关键字详解
底层内存分布
在这里插入图片描述
代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的;
常量区:存放常量(程序在运行时不能被改变的量),例如:10,字符串常量:“abcd”;数组名;
静态区(全局区):静态变量和全局变量的存储区域是一起的;一旦静态区的内存被分配,静态区的内存直到程序结束之后才会被释放
堆区:由程序员调用**malloc()**函数来主动申请的,需使用free()函数来释放内存,若申请的堆区内存,之后忘记释放,就会造成内存泄漏问题;
栈区:存放函数的局部变量、形参和函数返回值,栈区之中的数据作用范围过了之后,系统就会自动回收内存。

在栈上创建数组时,不能使用含有变量的表达式,如:int a[x+2]是错误的。
在栈上创建的数组,编译时就需要在栈上分配内存,可是有了变量以后,编译器就无法知道分配多大的内存了,编译器就会报错。
在堆上可以动态创建数组,因为在堆上创建数组时,编译器不会做编译时分配内存,而是在程序运行时分配内存,我们可以知道,程序运行时变量的值就会明确还多少,故动态创建数组时就可以出现变量。

static关键字
(1)用于修饰局部变量,全局变量和函数;
(2)存放在静态区;
(3)定义时没有初始化时,会将其初始化为0;
(4)修饰局部变量时,函数返回时,值不变
(5)修饰全局变量和函数时,只在当前文件可见,降低程序模块之间的耦合性。

const关键字
(1)被修饰的变量不可被修改;
(2)存放在常量区;
(3)const修饰的普通变量:定义时就是赋初值,后面就不能被修改了;
(4)const修饰的全局变量存放在常量区,也不可修改。
(5)const修饰的变量并不会存放在全局(静态)区,而是取决于他定义的地方,局部定义就是在栈区,全局定义就是在静态区。

static和const区别
static修饰的变量称为静态变量,存储在全局(静态)区,生命周期程序编译到运行结束;
const修饰的变量并不会存放在全局(静态)区,而是取决于它定义的地方,局部定义的就存在栈区,全局定义的就存放在静态区。
const修饰的变量不能被修改,为什么不放在只读数据区呢,是因为C语言中使用const修饰了一个变量,该变量不能直接修改,但是可以通过拿到这个变量的地址来修改这个变量。
在这里插入图片描述
但是如果修饰的字符串常量,那就无论如何也修改不了的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在Windows系统中,内存布局可以分为以下几个部分: 1. 内核空间(Kernel Space):这是操作系统内核和驱动程序所使用的内存空间。它的大小通常为2GB或更高,这取决于Windows系统的版本和配置。在这个空间中,内核可以直接访问硬件和其他资源。 2. 用户空间(User Space):这是用户进程所使用的内存空间。它通常占据了进程地址空间的大部分,并由虚拟内存机制管理。在这个空间中,用户进程可以访问自己的代码和数据,以及共享库和系统资源等。 3. 内存映射文件(Mapped Files):这是一种特殊的内存映射,它将文件映射到进程的地址空间中。这使得进程可以像访问内存一样访问文件内容。在Windows系统中,内存映射文件通常用于实现共享内存区域和动态链接库等。 4. 堆(Heap):这是一个动态分配的内存区域,用于进程中的动态数据结构和变量。在Windows系统中,堆由Heap Manager管理,支持动态分配和释放内存,以及内存池和垃圾收集等。 5. 栈(Stack):这是用于函数调用和局部变量的一种内存区域。在Windows系统中,每个线程都有自己的栈,用于存储函数参数、返回地址和局部变量等。 6. 内存管理结构(Memory Management Structures):这是Windows系统用于管理内存的数据结构和算法。包括虚拟内存管理机制、页面替换算法、内存分配器、进程内存管理和系统内存管理等。 在Windows系统中,内存布局的具体实现会根据系统版本、硬件配置和应用程序需求等因素而有所不同。但以上这些部分通常都是包含在内存布局中的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

<( ̄︶ ̄)Okay.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值