还剩26页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
的片内存储器C了解片内存储器在语言编程中的作用C语言基础知识回顾C变量数据类型运算符控制流用于存储数据的容器,拥有定义变量存储数据的种类,对数据进行操作的符号,如控制程序执行顺序的语句,特定数据类型和名称如整数、浮点数、字符等算术运算符、关系运算符等如条件语句、循环语句等初识语言内存管理C内存分配C语言允许程序员直接管理内存,包括分配和释放内存内存管理方式程序员可以通过手动分配和释放内存,或者使用自动内存管理机制内存泄露如果程序员忘记释放不再使用的内存,就会导致内存泄露内存访问越界访问超出分配范围的内存可能会导致程序崩溃或其他问题什么是片内存储器程序代码和数据存储直接访问片内存储器,也称为内部存可以直接访问片内存CPU储器,是计算机系统中用来储器,无需经过其他设备存储程序代码和数据的物理存储器速度快相比外部存储器(如硬盘),片内存储器访问速度更快片内存储器的作用数据存储程序执行片内存储器用于存储程序代码、数据以及系统运行时产生可以直接访问片内存储器,快速读取和写入数据,从CPU的临时数据而提高程序执行效率片内存储器的分类自动存储类寄存器存储类函数内部定义的变量,其存储空将变量存储在的寄存器中CPU间在函数调用时分配,函数调用,访问速度最快,但存储空间有结束后释放限静态存储类外部存储类变量在程序运行期间始终占用内变量定义在函数外部,全局可见存空间,其值在函数调用结束后,其值可以被多个函数访问和修不会消失改自动存储类自动分配生命周期存储位置在函数被调用时自动分配内存,函变量的生命周期仅限于函数执行的通常存储在栈区,这是一种先进后数执行完毕后自动释放内存范围内出的数据结构自动存储类变量的特点生命周期存储位置自动变量仅在函数或代码块执行期间存在,当执行离开该自动变量存储在程序的堆栈内存中,堆栈内存是用于存储范围时,自动变量将被销毁函数调用和局部变量的区域自动存储类变量的声明与使用声明1在函数内部声明初始化2在声明时或函数开始执行时初始化作用域3仅在声明的函数内有效寄存器存储类速度提升有限空间直接在的寄存器中存储变量,访问速度更快,可以优寄存器数量有限,只能存储少量变量,不适用于存储大型CPU化程序性能数据结构寄存器存储类的特点速度快容量小生命周期短123寄存器是内部的高速存储寄存器数量有限,每个寄存器寄存器存储的数据在程序运行CPU器,访问速度比内存快得多通常只能存储一个数据期间随时可能被覆盖寄存器存储类变量的声明与使用声明限制使用关键字`register`声明寄存器存储类变量例如`register intcount;`编译器可能忽略`register`关键字不能获取寄存器变量的地址123使用与普通变量一样使用例如`count++;`静态存储类静态存储类变量在程序执行期间始终静态存储类变量被分配在程序的静态静态存储类变量具有函数级的作用域存在,即使函数调用结束后也不会被存储区域,通常是数据段或段,即只能在声明它们的函数内部访问BSS销毁它们保持其值,直到程序终止静态存储类变量的特点内存分配初始化静态存储类变量在程序执行静态存储类变量在程序开始之前分配内存,在程序结束执行前被初始化一次,其值时才释放内存在程序执行期间保持不变作用域生命周期静态存储类变量的作用域仅静态存储类变量的生命周期限于声明它的函数或文件与整个程序的生命周期相同静态存储类变量的声明与使用声明1使用关键字修饰变量static初始化2在定义时初始化,否则自动初始化为0作用域3只能在定义它的函数或文件中使用生命周期4从程序开始运行到结束,始终存在外部存储类全局变量作用域在程序中任何位置都可以访外部存储类变量的作用域在问外部存储类变量整个程序中都存在,直到程序结束才被销毁生命周期外部存储类变量的生命周期与整个程序的生命周期相同外部存储类变量的特点全局可见持久性在整个程序中都可以访问外部存储类变量,这意味着可以外部存储类变量在程序执行期间一直存在,即使函数执行在任何函数中使用它们完毕后它们的值也不会丢失外部存储类变量的声明与使用全局变量1在函数外部声明修饰static2限制作用域关键字extern3声明外部变量外部存储类变量在程序运行期间一直存在,其作用域为整个程序在函数外部声明的变量称为全局变量,可以被所有函数访问动态内存分配灵活分配自由控制高效利用在程序运行时,根据需要动态地分配程序员可以自由地决定何时分配、释避免预先分配过多的内存空间,节省内存空间放内存,以及分配多少内存系统资源动态内存分配的原理程序运行时,系统会为程序分配一块当程序需要额外的内存时,可以使用系统会返回一个指向分配内存区域的内存空间,称为堆动态内存分配函数向系统申请内存指针,程序可以使用该指针访问分配的内存函数malloc分配内存1函数在堆内存中分配指定大小的内存空间malloc返回指针2如果分配成功,函数会返回指向分配内存空malloc间的指针错误处理3如果分配失败,函数会返回指针malloc NULL函数free释放内存当不再需要动态分配的内存时,可以使用free函数释放它这会将内存返回给操作系统,以便其他程序可以利用它指针的用途free函数需要传递一个指向要释放的内存块的指针在调用free后,指针将变为无效指针,不应该再使用它安全使用务必确保在调用free之前,内存块是通过malloc或calloc分配的如果free一个未分配的指针,会引发崩溃内存泄露的原因及预防忘记释放内存指针丢失使用完动态分配的内存后,指向已分配内存的指针被意没有调用函数释放内外修改或销毁,导致无法释free存放内存循环引用多个指针相互引用,形成循环,导致内存无法释放内存访问越界的危害程序崩溃数据损坏安全漏洞访问越界会导致程序崩溃,无法正常越界访问可能会覆盖其他数据,导致越界访问可能会导致安全漏洞,被恶运行数据损坏意程序利用指针与数组在内存中的关系指针指向数组数组名是常量指针指针可以指向数组的第一个元素,通过指针可以访问数组数组名表示数组的首地址,是一个常量指针,不能被修改中的所有元素指针的结构体应用通过指针访问结构体成员,提高指针可以传递结构体变量的地址代码效率,实现结构体参数传递指针可以用来动态创建结构体数组,灵活管理内存课堂练习内存分配1编写程序,动态分配内存,并进行数据操作指针使用2使用指针访问数组元素,实现数据交换结构体应用3定义结构体类型,并使用指针访问结构体成员课程总结与QA今天我们学习了语言片内存储器从语言基础回顾开始,深入讲解C C了不同存储类的特点和使用场景,并介绍了动态内存分配及其相关函数最后还探讨了内存泄露和访问越界等常见问题现在,大家有什么问题吗?请随时提问,我会尽力解答。
个人认证
优秀文档
获得点赞 0