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

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 【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

相关文章
|
2月前
|
存储 缓存 Java
Java 并发编程——volatile 关键字解析
本文介绍了Java线程中的`volatile`关键字及其与`synchronized`锁的区别。`volatile`保证了变量的可见性和一定的有序性,但不能保证原子性。它通过内存屏障实现,避免指令重排序,确保线程间数据一致。相比`synchronized`,`volatile`性能更优,适用于简单状态标记和某些特定场景,如单例模式中的双重检查锁定。文中还解释了Java内存模型的基本概念,包括主内存、工作内存及并发编程中的原子性、可见性和有序性。
Java 并发编程——volatile 关键字解析
|
2月前
|
存储 程序员 C++
深入解析C++中的函数指针与`typedef`的妙用
本文深入解析了C++中的函数指针及其与`typedef`的结合使用。通过图示和代码示例,详细介绍了函数指针的基本概念、声明和使用方法,并展示了如何利用`typedef`简化复杂的函数指针声明,提升代码的可读性和可维护性。
107 1
|
2月前
|
缓存 Java 调度
多线程编程核心:上下文切换深度解析
在现代计算机系统中,多线程编程已成为提高程序性能和响应速度的关键技术。然而,多线程编程中一个不可避免的概念就是上下文切换(Context Switching)。本文将深入探讨上下文切换的概念、原因、影响以及优化策略,帮助你在工作和学习中深入理解这一技术干货。
58 10
|
2月前
|
存储 编译器 C语言
【C语言】数据类型全解析:编程效率提升的秘诀
在C语言中,合理选择和使用数据类型是编程的关键。通过深入理解基本数据类型和派生数据类型,掌握类型限定符和扩展技巧,可以编写出高效、稳定、可维护的代码。无论是在普通应用还是嵌入式系统中,数据类型的合理使用都能显著提升程序的性能和可靠性。
75 8
|
2月前
|
算法 调度 开发者
多线程编程核心:上下文切换深度解析
在多线程编程中,上下文切换是一个至关重要的概念,它直接影响到程序的性能和响应速度。本文将深入探讨上下文切换的含义、原因、影响以及如何优化,帮助你在工作和学习中更好地理解和应用多线程技术。
54 4
|
3月前
|
存储 缓存 开发者
Python编程中的装饰器深度解析
本文将深入探讨Python语言的装饰器概念,通过实际代码示例展示如何创建和应用装饰器,并分析其背后的原理和作用。我们将从基础定义出发,逐步引导读者理解装饰器的高级用法,包括带参数的装饰器、多层装饰器以及装饰器与类方法的结合使用。文章旨在帮助初学者掌握这一强大工具,同时为有经验的开发者提供更深层次的理解和应用。
50 7
|
3月前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
3月前
|
安全 程序员 API
|
3月前
|
存储 设计模式 分布式计算
Java中的多线程编程:并发与并行的深度解析####
在当今软件开发领域,多线程编程已成为提升应用性能、响应速度及资源利用率的关键手段之一。本文将深入探讨Java平台上的多线程机制,从基础概念到高级应用,全面解析并发与并行编程的核心理念、实现方式及其在实际项目中的应用策略。不同于常规摘要的简洁概述,本文旨在通过详尽的技术剖析,为读者构建一个系统化的多线程知识框架,辅以生动实例,让抽象概念具体化,复杂问题简单化。 ####
|
3月前
|
设计模式 安全 Java
Java编程中的单例模式深入解析
【10月更文挑战第31天】在编程世界中,设计模式就像是建筑中的蓝图,它们定义了解决常见问题的最佳实践。本文将通过浅显易懂的语言带你深入了解Java中广泛应用的单例模式,并展示如何实现它。

热门文章

最新文章

推荐镜像

更多