【C语言指针详解-CSAPP数据段解析】1024程序员节 | 汇编语言机械级编程|用代码,改变世界#

简介: 【C语言指针详解-CSAPP数据段解析】1024程序员节 | 汇编语言机械级编程|用代码,改变世界#

🍃课堂讲解


内存中的数据

1668322006412.jpg

1668322018749.jpg

数组就是个地址然后有头尾


val【】

当我们val+1 在内存里就是 x+4

🤔️我们是为了让这个指针指向下一个值的地址

编译器知道这个变量是什么变量类型!


只有*(Val+1) 才是 5


如果下标变成负值呢?也可以用


实际举例


注意⚠️:每次都要给你要加入的数字一个确切的名字,不然就是magic number,让人困惑是不是只有他可以

都要初始化变量

1668322039389.jpg


注意这个数组定义很有意思:

相当于int cmu【5】={1,2,3,4,5}


1668322059258.jpg


看图 汇编底层实现数组:

movl(rdi,rsi,4), eax

这就是取数:z【digital】


循环数组


1668322079000.jpg

注意:c和汇编特别相似:比如+=这个符号

goto


指针和数组区别:


指针声明以后不分配空间。而数组则会分配空间

注意⚠️:如果我

声明a[3];这是一个指向一个三个int空间的指针。

但是如果我*a【3】这就有空指针的风险

因为这是个指针,不是数组,没有初始化。

这样很危险。

1668322102500.jpg

1668322113770.jpg


为什么a【1】【j】比a【i】【1】快


1668322130262.jpg


我们看汇编代码:他们首先是走一大步走到a【i】上–这一步有时候用乘法,有时候就是位运算,但是比起加法肯定是慢的,然后再通过movl(rdi,rdx,4),eax来走一小步一小步的j

所以必然 便利的时候一直走小步就可以了,更加方便,如果每次都要重新迈大步那就慢了。


节省空间的定义方法—防止内存对齐的浪费–把最大的放最前面


1668322152260.jpg


浮点数的实现,及其计算


之前背景:

被集成到专门的芯片上面搞浮点数-------------显卡?

1668322173922.jpg

1668322184480.jpg

SSE3示例:

每个16字节寄存器


用以实现浮点数运算—配合ieee754非常先进的方式!!!

1668322229783.jpg


注意:

addss=add single precision scalar

用这个SIMD指令可以做到快速计算浮点数---------------------------------------------------显卡


1668322251478.jpg


浮点数运算的代码-示例


1668322278521.jpg


浮点数汇编:


把数字放在xmm1寄存器非常与众不同


现在用ymm


浮点 整型代码计算混在一起 示例:

1668322309960.jpg

相关文章
|
11月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
425 20
|
11月前
|
存储 人工智能 Java
一文轻松拿捏C语言的指针的基础使用
本文介绍了C语言中的指针概念,包括直接访问和间接访问内存的方式、指针变量的定义与使用、取址运算符`&`和取值运算符`*`的应用,帮助读者深入理解指针这一C语言的核心概念。君志所向,一往无前!
251 0
|
存储 网络协议 编译器
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
1052 14
|
11月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
360 0
|
Unix 编译器 C语言
[oeasy]python052_[系统开发语言为什么默认是c语言
本文介绍了C语言为何成为系统开发的首选语言,从其诞生背景、发展历史及特点进行阐述。C语言源于贝尔实验室,与Unix操作系统相互促进,因其简洁、高效、跨平台等特性,逐渐成为主流。文章还提及了C语言的学习资料及其对编程文化的影响。
129 5
|
存储 编译器 C语言
【C语言】指针大小知多少 ?一场探寻C语言深处的冒险 !
在C语言中,指针的大小(即指针变量占用的内存大小)是由计算机的体系结构(例如32位还是64位)和编译器决定的。
1475 9
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
590 8
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
440 7
|
存储 算法 C语言
【C语言】深入浅出:C语言链表的全面解析
链表是一种重要的基础数据结构,适用于频繁的插入和删除操作。通过本篇详细讲解了单链表、双向链表和循环链表的概念和实现,以及各类常用操作的示例代码。掌握链表的使用对于理解更复杂的数据结构和算法具有重要意义。
3717 6
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
2261 5