内存管理之结构体
Posted sanshijvshi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内存管理之结构体相关的知识,希望对你有一定的参考价值。
数据结构这门学问的意义
数据结构就是研究数据如何组织(在内存中排布),如何加工的学间。...4.1.6.2、最简单的数据结构:数组
为什么要有数组?因为程序中有好多个类型相同、意义相关的变量需要管理n这时候如果用单独的变量来做程序看起来比较乱,用数组来管理会更好管理。譬如int ages[20];
数组的优势和缺陷
优势:数组比较简单,访问用下标,可以随机访问。
缺陷: 1数组中所有元素类型必须相同; 2数组大小必须定义时给出,而且一旦确定不能再改。
结构体隆重登场
结构体发明出来就是为了解决数组的第1个缺陷,数组中所有元素类型必须相同
我们要管理3个学生的年龄(int类型),怎么办?
第一种解法,用数组 int ages[3];
第二种解法,用结构体
struct ages
{
int agel;
int age2;
int age3;
};
struct ages age;
分析总结:在这个示例中,数组要比结构体好。但是不能得出结论说数组就比结构体好,在包中元素类型不同时就只能用结构体而不能用数组了
struct people
{
int age; //人的年龄
char name [20] ; //人的姓名
height; //人的身高
};
因为people的各个元素类型不完全相同,所以必须用结构体,没法用数组。
结构体内嵌指针实现面向对象面向过程与面向对象
总的来说:c语言是面向过程的,但是c语言写出的linux系统是面向对象的。
非面向对象的语言,不一定不能实现面向对象的代码。只是说用面向对象的语言来实现面向对象要更加简单一些直观一些、无脑一些。
用C++、Java等 面向对象的语言来实现面向对象简单一些,因为语言本身帮我们做了很多事情,但是用c来实现面向对象很麻烦,看起来也不容易理解,这就是为什么大多数人学过c语言却看不懂linux内核代码的原因。
struct 3
{
int age; //普通变量
void (*pFunc) (void); //函数指针,指向void func (void)这类的函数
}
使用这样的结构体就可以实现面向对象。
这样包含了函数指针的结构体就类似于面向对象中的class,结构体中的变量类似于class中的成员变量,结构体中的函数指针类似于class中的成员方法。
以上是关于内存管理之结构体的主要内容,如果未能解决你的问题,请参考以下文章
Linux 内核 内存管理物理内存组织结构 ③ ( 内存管理系统三级结构 | 内存节点描述 | 内存节点 pglist_data 结构体 | pglist_data 结构体源码 )
Linux 内核 内存管理物理内存组织结构 ④ ( 内存区域 zone 简介 | zone 结构体源码分析 | zone 结构体源码 )