csapp 读书笔记

news2024/11/20 1:23:54

第二章:信息的表示和处理

历史上因程序bug导致重大事故的情况很多是由数字溢出,缓冲区溢出导致的。

本章主要讲的是基本数据类型的(IEEE)表示,大小端,以及二进制位运算的骚操作案例。

第三章:程序的机器级表示

本章主要讲 C语言代码翻译成的汇编语言代码。通过对比,理解程序如何在汇编级上运行的。
涉及各种数据操作指令,PC和16个寄存器。
3.7 节重点讲了函数调用的汇编实现。在这里插入图片描述
如果函数Q执行的过程中出现缓冲区溢出或者内存越界访问,那么可能导致上面被保存的寄存器被错改,甚至返回地址被修改,导致调用者拿到的返回地址是一段恶意攻击代码的地址。
os 提供了栈地址随机化,栈破坏检测[插入金丝雀数据] 等对抗的方法。在这里插入图片描述

第四章: 处理器体系结构

讲 cpu 的计算机组成原理课,跳过

第五章: 优化程序性能

编译器优化

gcc 可选择编译优化的程度,通过 -O1 O2 这样的命令参数。

考虑交换函数:

void func(long *x1, long *x2){
*x1 += *x2;
*x1 += *x1;
}

编译器不能将其优化成:

void swap1(long *x1, long *x2){
*x1 += 2 * *x2;
}

因为在 x1 和 x2 地址相同时前者是4倍加法。

同理对于函数调用也是:

long f();

long fun1(){
return f() + f();
}

long fun2(){
return 2 * f()
}

因为 f() 中可能包含对全局变量的修改。

另外,对于swap 函数不用临时变量的写法,编译器同样没法优化。

void swap(long *x1, long *x2){
*x1 = *x1 + *x2;
*x2 = *x1 - *x2;
*x1 = *x1 - *x2;
}

针对 for 循环的优化:

void sum1(long x1[], long s[], int n){
long i ;
s[0] = x1[0] ;
for(i = 1; i < n; i++){
	s[i] = s[i-1] + x1[i];
}
}

循环了 n 次, 可以优化成 n/2 次:

void sum2(long x1[], long s[], int n){
long i ;
s[0] = x1[0] ;
for(i = 1; i < n-1; i+=2){
	long mid_val = s[i-1] + x1[i];
	s[i] = mid_val;
	s1[i+1]  = s[i] + x1[i+1];
}
if(i < n){
s[i] = s[i-1] + x1[i];
}
}

sum2 函数是 sum1 性能的 1.5 倍左右
以上被称为"循环展开": 例如下面3种
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类似的可以采用 k * k 展开。 但当k过大时会导致寄存器溢出,16个寄存器不够存储那么多展开时的临时变量,导致只能在栈上分配额外空间进行读写,反而降低了性能。

另外,从CPU指令角度和业务代码角度提高程序并行性,可大幅提高性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/62579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

名窑讲坛:钧瓷“神、奇、妙、绝”四大特色之“妙”——纹路

文/倾灵叶 钧瓷以“入窑一色&#xff0c;出窑万彩”的神奇窑变著称于世。 钧瓷的纹路是经自然窑变形成的具有自身典型艺术特征釉面装饰&#xff0c;是特殊的釉料和独特的烧成工艺的产物&#xff0c;与其他窑系陶瓷作品人工雕刻、压刻和绘制而成的纹饰存在着本质的不同&#xf…

12家硬件厂商发布飞桨生态发行版 软硬一体协同发展

11月30日&#xff0c;由深度学习技术及应用国家工程研究中心主办、百度飞桨承办的WAVE SUMMIT2022深度学习开发者峰会如期举行。峰会上&#xff0c;百度AI技术生态总经理马艳军发布了飞桨深度学习平台的最新技术和生态进展&#xff0c;全新发布飞桨开源框架2.4版本&#xff0c;…

Fast Report .NET 2023.1 Crack

Fast Report .NET 适用于 .NET 6、.NET Core、Blazor、ASP.NET、MVC 和 Windows 窗体的全功能报告库。它可以在 Microsoft Visual Studio 2022 和 JetBrains Rider 中使用。 适用于 .NET 6、.NET Core、Blazor、ASP.NET、MVC 和 Windows 窗体的全功能报告库。它可以在 Microso…

计算机毕业论文java毕业设计选题源代码ssm的校园单车自行车租赁系统|租车系统

&#x1f496;&#x1f496;更多项目资源&#xff0c;最下方联系我们✨✨✨✨✨✨ 目录 Java项目介绍 资料获取 Java项目介绍 3.2.1技术可行性&#xff1a;技术背景 系统的开发环境和配置都是可以自行安装的&#xff0c;使用比较成熟的开发工具和数据库进行对系统用户…

Highlight_Matching_Pair问题解决

Highlight_Matching_Pair问题解决1 <SNR>20_Highlight_Matching_Pair1.1 提示的问题1.2 出发问题出现的条件1.2.1 访问到“&#xff08;&#xff09;”时会出现1.2.1 访问到不成对的“{}”时会出现2 解决办法2.1 首先确认matchparen.vim是否最新2.2 将vim更新到最新的版本…

数据结构—查找方法改进流程

文章目录哈希表哈希表 >红黑树—1—> 哈希表缺点—2—> 二维数组—3—> 数组加链表—4—> 树—5—> 有序二叉树—6—> 平衡二叉树—7—> 多叉树—8—> 红黑树红黑树的特点红黑树和链表的选择———————————————————————————…

ansible的主机清单和Playbook(剧本)

一、inventory---主机清单 1.1 支持对主机分组&#xff0c;每个组内可以定义多个主机&#xff0c;可以把一台主机分别放在两个组内。 把.10到.100的主机全部放在这个组里面&#xff08;/etc/ansible/hosts:配置文件&#xff09; 有的主机不是以ip地址放在主机清单里的&#x…

企业实施SRM系统应该避开哪些误区?

近年来&#xff0c;SRM供应商协同管理系统逐渐在各行各业中得到广泛运用&#xff0c;许多企业在SRM选型时投入了大量的时间、资源和精力&#xff0c;但系统上线后的效果却并不理想。SRM选型时常见的误区主要有以下几种&#xff1a; 误区一&#xff1a;头痛医头脚痛医脚&#x…

[附源码]计算机毕业设计人体健康管理appSpringboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【从零开始学习深度学习】6.使用torchvision下载与查看图像分类数据集Fashion-MNIST

目录1.1 获取Fashion-MNIST数据集2.2 读取小批量小结图像分类数据集中最常用的是手写数字识别数据集MNIST。但大部分模型在MNIST上的分类精度都超过了95%。为了更直观地观察算法之间的差异&#xff0c;我们将使用一个图像内容更加复杂的数据集Fashion-MNIST。 本节我们将使用to…

博图Modbus组态及参数设定源码

1、组态选择 协议为Modbus,可在程序里设置通讯方式 2、参数初始化设置 3、选择伺服Modbus 地址 4、写入负值&#xff0c;两个字都必须是负值 5、接线方式 伺服端&#xff1a;驱动器通过通讯连接器与计算机相连&#xff0c;使用者可利用 MODBUS 通讯结合汇编语言来操作驱动器&…

运放失调电压失调电流,计算输入电压信号大小,设计反向放大器

笔者电子信息专业硕士毕业&#xff0c;获得过多次电子设计大赛、大学生智能车、数学建模国奖&#xff0c;现就职于南京某半导体芯片公司&#xff0c;从事硬件研发&#xff0c;电路设计研究。对于学电子的小伙伴&#xff0c;深知入门的不易&#xff0c;特开次博客交流分享经验&a…

销售抓住客户心理的话术

由于销售会与各种各样的人打交道&#xff0c;因此销售也是最容易洞察客户心理的职业&#xff0c;优秀的销售懂得如何抓住客户的心理&#xff0c;从而挖掘客户的需求和痛点&#xff0c;进一步促进成交。 前言 由于销售会与各种各样的人打交道&#xff0c;因此销售也是最容易洞察…

【NC65】主子表单据按照单表结构展现 节点客开

需求描述: 需要将【采购入库】按照【采购订单关闭】节点的形式展现数据。 客开思路: 功能注册增加功能节点,(40080603)勾选启用。菜单注册增加 菜单 并关联 功能节点(40080603)。初始化 单据模板,查询模板采购入库单主子表汇总VO是PurchaseInViewVO ,系统里其他单据节点 …

MyBatis-Plus之ActiveRecord[基础增删改查操作]

系列文章目录 Mybatis-Plus知识点[MyBatisMyBatis-Plus的基础运用]_心态还需努力呀的博客-CSDN博客 Mybatis-PlusSpringBoot结合运用_心态还需努力呀的博客-CSDN博客MyBaits-Plus中TableField和TableId用法_心态还需努力呀的博客-CSDN博客 MyBatis-Plus中的更新操作&#xf…

应用层之HTTP和HTTPS协议(必备知识)

文章目录1、什么是HTTP协议2、HTTP协议格式<1>HTTP请求方法<2>HTTP的状态码3、HTTP是不保存状态的协议<1>使用Cookie的状态管理3、HTTPS<1>加密方式<2>理解HTTPS加密过程1、什么是HTTP协议 HTTP协议常被称为超文本传输协议&#xff0c;HTTP协议…

国产蓝牙耳机什么牌子好?2022蓝牙耳机品牌排行

随着蓝牙耳机市场的快速发展&#xff0c;国产蓝牙耳机品牌也越来越多。那么在众多的国产蓝牙耳机当中&#xff0c;什么牌子的比较好呢&#xff1f;下面&#xff0c;一起来看看2022蓝牙耳机品牌排行吧。 一、南卡小音舱蓝牙耳机 售价&#xff1a;299 蓝牙&#xff1a;5.3 发…

ADSP-21489的开发详解:VDSP+自己编程写代码开发(4-按键控制 LED 灯)

以上全部都 OK 之后&#xff0c;我们就可以开始跑程序了。&#xff08;抱歉上面几项写的很罗嗦&#xff0c;都是我这近 15 年来开发 ADI DSP 实际项目里碰到问题的经验之谈&#xff0c;希望能够对用户有帮助&#xff09; 跑程序就涉及到了 Visual DSP软件的操作&#xff0c;我…

高校教材征订系统(Java+Web+MySQL)

目 录 ABSTRACT 2 1 概述 5 1.1开发背景 5 1.2 项目提出的意义 5 1.3 系统的开发方法 5 1.4 系统开发工具 6 1.4.1 JSP简介 6 1.4.2 JDK配置 7 1.4.3 数据库简介 8 1&#xff0e;4&#xff0e;4 tomcat配置 9 2 需求分析 11 2.1可行性分析 11 2.2 系统设计的要求 11 2.3 系统功…

01、RabbitMQ入门

目录 1.、什么是MQ 2、应用场景 3、主流MQ框架 4、Docker安装部署RabbitMQ 5、RabbitMQ管理平台 6、MQ的核心概念 单一生产者和单一消费者 7、springboot整合rabbitmq 执行测试方法testRabbitmq&#xff0c;控制台输出&#xff1a;receive msg : test rabbitmq messag…