wordpress最近评论,seo长尾关键词,好网站制作公司,青岛网站建设企业建站存储类别、链接和内存管理
这一章主要涉及到的是一些偏概念的东西#xff0c;基本上偏向于自己去理解这部分内容。很好地理解这一章可以更好地控制程序#xff0c;合理的利用内存存储数据。
C语言提供了多种不同的模型或存储类别在内存中存储数据。作用域有块作用域、函数作…存储类别、链接和内存管理
这一章主要涉及到的是一些偏概念的东西基本上偏向于自己去理解这部分内容。很好地理解这一章可以更好地控制程序合理的利用内存存储数据。
C语言提供了多种不同的模型或存储类别在内存中存储数据。作用域有块作用域、函数作用域、函数原型作用域或文件作用域。链接有外部链接、内部链接和无链接。存储器有四种静态存储期、线程存储期、自动存储期、动态分配存储期。 自动变量一般创建变量默认是自动变量也可以显示使用关键字auto块作用域程序在进入该变量声明的块时变量存在在退出该块时变量消失原来占用的内存位置现在可以做为他用。
寄存器变量存储类别说明符register幸运的话可以将变量放到CPU寄存器中访问和处理的速度更快无法获得寄存器变量的地址倘若不幸运没有放到寄存器中就会变成普通的自动变量但是仍不能获取到地址。可声明的类型有限。
快作用域的静态变量在块中。以存储类别说明符static声明的变量块作用域但是出块之后仍不会消失。不能在函数的形参中使用static。
外部链接的静态变量把变量的定义时声明放到函数的外面。可以在函数中使用extern进行引用时声明。作用域是从声明处到文件结尾。可以在其他文件中引用这部分变量。
内部链接的静态变量用存储类别说明符static定义的静态变量大概和上面这一个类似只是只能在同一个文件内使用。 函数也有存储类别可以分为外部函数默认静态函数内联函数后续介绍。外部函数可以被其他文件的函数访问但是静态函数只能用于其定义的文件。
随意使用外部存储类别的变量导致的后果远远超过了它所带来的便利。唯一例外的是const数据因为它们在初始化之后就不会改变不用担心被意外修改。
还可以使用库函数分配和管理函数。malloc函数和free函数。
malloc函数接受一个参数所需的内存字节数然后函数会找到合适的内存空间这块内存是匿名的返回动态分配内存块的首字节地址。如果分配内存失败会返回空指针。如果内存分配失败可以调用exit函数结束程序。
指向void的指针相当于一个通用指针。把其赋值给任意类型的指针完全不用考虑类型匹配的问题。
free函数接受的参数是之前malloc返回的地址free函数释放malloc函数分配的地址。不能用free释放通过其他方式分配的内存。不能释放同一块内存两次
calloc函数接受两个参数第一个是所需的存储单元数量第二个是存储单元的大小以字节为单位该函数会将块中的所有位都设置为0.同样可以用free函数去释放其分配的内存。 恒常性和易变性分别用关键字const和volatile来声明这两个类型是限定类型。他们现在是幂等的可以在一条生命中多次使用同一个限定符多余的限定符将被忽略。
声明指针时const放在*号左侧任意位置限定了指针指向的数据不能改变const放在*号右侧限定了指针本身不能改变。
volatile限定符代理可以改变变量的值。可以用const和volatile限定一个值设置为程序不能更改的变量但是可以通过代理改变。
restrict类型限定符允许编译器优化某部分代码以更好的支持运算。只能用于指针表明该指针是访问数据对象的唯一且初识的方式。还可以在形参中使用意味着编译器可以假定在函数体内其他标识符不会修改指针指向的数据。
_Atomic类型限定符原子类型声明多用于多线程开发。其他线程不能访问原子类型声明的变量。