【精通高并发】深入理解C语言基础与汇编下的C语言(二)
【摘要】 本文如题,C语言基础部分不过多赘述,主要讲解结构体、指针的原理,并分析汇编下的C语言。
前言:📫 作者简介:小明java问道之路,专注于研究计算机底层,就职于金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的设计和架构📫
🏆 Java领域优质创作者、阿里云专家博主、华为云专家🏆
🔥 如果此文还不错的话,还请👍关注、点赞、收藏三连支持👍一下博主哦
本文导读
本文如题,C语言基础部分不过多赘述,主要讲解结构体、指针和数组原理,并分析汇编下的C语言。Liunx内核和JNI都是通过C编写,这部分主要讲解通过操作指针和内存执行程序的思想,对后续Hotspot和java的api的理解有很重要的作用。
一、C语言基础
1.结构体应用
必须使用struct语句,struct语句定义了一个包含多个成员的数据类型
结构体应用:介绍了如何声明(定义)结构体,初始化结构体变量(相当于new或者set对象),如何访问结构体成员(相当于访问对象属性) ,结构体作为函数参数和指向结构体的指针应用。
二、.从汇编的角度看结构体
从此段简单的代码分析,name和age地址相差8个字节,整好是一个整形4个字节+4个字节填充,我们将其反汇编,看下汇编代码的实现。
三、指针原理
每个变量都会有一个内存地址,每个内存地址都可以使用&访问,他表示在内存中的地址。首先明确一个概念,指针就是一个变量,其值就是另一个变量的地址(内存位置的直接地址),所有使用的时候必须先声明。
指针的应用:这里面p就是一个指针,与变量var的类型相同
1、从汇编的角度看指针
将上述代码反汇编之后的代码,作者为64位系统
这里我们总结,指针就是一个内存单元保存了一个地址,一般用&地址符,相当于 lea 指令,使用指针用 * 解地址符,相当于汇编代码中的 () 例如 mov (%rax),%eax,将之前的 lea 指令获取的地址信息作为访问,以获取地址响应的变量信息。
2、一些指针的基础应用
通过指针访问数组,数组是连续的空间,指针中保存的是对应数据的地址,声明数组的时候就是默认新开辟连续的地址空间的第一个元素的地址,使用var[index] 等价于我们直接操作指针 * 引用获取元素;
指针数组就是保存元素地址(指针)的数组
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)