🍃课堂讲解
内存中的数据
数组就是个地址然后有头尾
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
浮点 整型代码计算混在一起 示例: