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

发布于:2022-10-21 ⋅ 阅读:(537) ⋅ 点赞:(0)

🍃博主昵称:一拳必胜客
博主主页面链接:博主主页传送门
博主专栏页面连接:专栏传送门–计算机考研
🍑创作初心:本博客的初心是每天分享记录自己学习的脚步,和各位技术友探讨交流;
博主研究方向:渗透测试、嵌入式、机器学习;
🌸博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;
‘’
 特别鸣谢:木芯工作室
特别鸣谢:木芯工作室 、Ivan from Russia



🍃课堂讲解

内存中的数据

在这里插入图片描述

在这里插入图片描述

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

val【】
当我们val+1 在内存里就是 x+4
🤔️我们是为了让这个指针指向下一个值的地址
编译器知道这个变量是什么变量类型!

只有*(Val+1) 才是 5

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

实际举例

注意⚠️:每次都要给你要加入的数字一个确切的名字,不然就是magic number,让人困惑是不是只有他可以
都要初始化变量
在这里插入图片描述

注意这个数组定义很有意思:
相当于int cmu【5】={1,2,3,4,5}

在这里插入图片描述

看图 汇编底层实现数组:
movl(rdi,rsi,4), eax
这就是取数:z【digital】

循环数组

在这里插入图片描述
注意:c和汇编特别相似:比如+=这个符号
goto

指针和数组区别:

指针声明以后不分配空间。而数组则会分配空间
注意⚠️:如果我
声明a[3];这是一个指向一个三个int空间的指针。
但是如果我*a【3】这就有空指针的风险
因为这是个指针,不是数组,没有初始化。
这样很危险。

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
我们看汇编代码:他们首先是走一大步走到a【i】上–这一步有时候用乘法,有时候就是位运算,但是比起加法肯定是慢的,然后再通过movl(rdi,rdx,4),eax来走一小步一小步的j
所以必然 便利的时候一直走小步就可以了,更加方便,如果每次都要重新迈大步那就慢了。

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

在这里插入图片描述

浮点数的实现,及其计算

之前背景:
被集成到专门的芯片上面搞浮点数-------------显卡?
在这里插入图片描述

在这里插入图片描述

SSE3示例:
每个16字节寄存器

用以实现浮点数运算—配合ieee754非常先进的方式!!!
在这里插入图片描述

注意:
addss=add single precision scalar
用这个SIMD指令可以做到快速计算浮点数---------------------------------------------------显卡

在这里插入图片描述

浮点数运算的代码-示例

在这里插入图片描述
浮点数汇编:
把数字放在xmm1寄存器非常与众不同

现在用ymm

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

在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到