关于C语言内存操作的

本文主要探讨了C语言中内存操作的重要性,强调了其在嵌入式开发中的关键角色。文章介绍了C语言内存的四个主要区域:内核空间、栈空间、堆空间和全局数据空间。同时,详细讲解了栈、堆的特性和使用,如静态变量的存储位置、malloc与free函数的内存分配与释放,以及内存泄漏和内存溢出的概念。这门课程适合C语言基础不牢固的学习者,通过深入理解内存操作,提升C语言编程技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

寒假在家,想趁这个机会好好的补一下自己的C语言功底。毕竟以后要是嵌入式方向的话,C语言是非常重要的。课程中老师的一句话也是让我印象非常深刻:C语言的核心思想其实就是对内存的各种操作。

很庆幸我在网上看到了这门课,并且在慕课网上是免费的。个人感觉老师讲的非常好,通俗易懂,由浅入深。这也是算得上我在网上唯一一个看完全部课程视屏的网课吧,一共23节课,总共大概5个小时。断断续续的看了三天。其中一方面加深了以前的知识点,另一方面也解决了之前很多的疑惑。总之就是这门课很适合那些C语言还不是很扎实的同学学习。

这是课程地址:C语言内存操作

前面几节课讲的比较基础,就没有很细致的做笔记。下面记录一下最后几节课的一些笔记。

首先C语言操作的整块内存大致可分为一下4个部分。

【高地址0XFFFFFFFF】
-------------------------------------------------4G
内核空间                      应用程序不允许访问
-------------------------------------------------3G
运行时的栈空间            局部变量
---------------------------------------------------
运行时的堆空间            malloc的空间
---------------------------------------------------
全局的数据空间(初始化、未初始化)    全局变量
只读数据段                   定义的字符串之类
代码段                          code
--------------------------------------------------0G
【低地址0X00000000】

函数大括号内部的所有局部变量在此函数被运行时都保存在栈空间中,函数被运行时,会在栈内存中开辟一段空间,当函数运行结束时,该段栈空间就被销毁。
不同的函数可以定义相同名称的静态变量,原因就是对于静态变量,其实他们都有各自的后缀名用以区分。静态变量在函数结束后不会被销毁,且其存在data区或者bss区。
只读空间:是贯穿整个程序执行周期的。
栈空间:运行时,函数内部使用的变量,函数一旦返回该空间就释放,生存周期是函数内。
堆空间:运行时,可以自由、自我管理的分配的空间,生存周期是由程序员决定。
堆空间的分配和释放:

分配:malloc()函数:

  #include <stdlib.h>

  void *malloc( size_t size );

一旦成功执行,就返回分配好的地址给我们,只需接收其返回值。对于这个地址的读法,由程序员灵活把握。输入参数制定分配内存的大小,单位字节。
int *p = (int *)malloc(100);
在使用该函数时一般会加上这个判断:

if(p == NULL){error;}

释放:free(p);使用malloc一般和free配对使用。如果没有释放的话,可能会出现内存泄露问题。

之前也是不知道内存泄露到底是个什么情况,现在就来解决这个问题

1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 
2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内存溢出。 

C语言把内存交给程序员分配,这个活是一把双刃剑,利用好了能很好的提高自己程序的效率,利用不好真的是各种内存问题。所以搞C语言,基础只是还是要扎实啊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值