自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 收藏
  • 关注

原创 统计整数包含十进制数字的个数

【代码】统计整数包含十进制数字的个数。

2025-08-10 16:02:24 241

原创 栈破坏检测

buf在%ebp-20位置处,v在%ebp-24位置处,v比buf更靠近栈顶,buf数组溢出不会破坏v的值,会破坏金丝雀值,经过检查金丝雀值有无改变,就可以判断有无溢出发生。带保护者,v在%ebp-24位置处,buf在%ebp-20位置处。金丝雀值在%ebp-8位置处。B. 在有保护的代码中,对局部变量重新排列如何提供更好的安全性,以对抗缓冲区溢出攻击。不带保护者,v在%ebp-8位置处,buf在%ebp-20位置处。A. 对于两个版本:buf、v和金丝雀值分别在栈中什么位置?

2025-08-09 15:56:03 95

原创 希尔排序应用

使用希尔排序算法实现从放大到小排列数据。

2025-08-01 10:28:31 83

原创 基数排序法应用

基数排序法(LSD)思想:从低位到高位逐步进行排序,最终整体有序。

2025-07-26 20:31:33 119

原创 希尔排序算法应用

希尔排序算法思想: 对于n个无序数据,以小于n的整数d为距离,使用直接插入法,让距离为d的元素有序排列。减小d,继续使用直接插入法,让距离为d的元素有序排列。当d减为1,再使用直接插入法就能把这n个数据变为有序数列。

2025-07-25 11:23:48 82

原创 快速排序法应用

快速排序法的基本思路:有n个无序数据,以第1个数据为基准,比该数据小的数据放到它左边,比该数据大的数据放到其右边。然后对这两部分数据继续进行这样的排序,直到每个部分为空或者只有一个数据时,排序结束。

2025-07-24 11:35:03 111

原创 堆排序法应用

堆排序的基本思路:先构建堆,然后把根节点和最后一个节点交换,除去最后一个节点,剩余节点再构建堆,再一次把根节点和最后一个节点交换,一直到剩余节点数小于等于2时,排序结束。要实现从小到大的顺序排列元素,每个父节点的值大于或等于其任意一个子节点的值;要实现从大到小的顺序排列元素,每个父节点的值小于或等于其任意一个子节点的值。堆排序是一种选择排序算法,堆排序是利用堆的特性进行排序的过程。通常堆的数据结构是二叉堆。堆的特点是根节点的值最大(或最小),且根节点的两个子树也是堆。

2025-07-23 14:18:31 140

原创 程序会输出多少个“Hello”行

父进程输出一个“hello”行,子进程和孙进程各输出两个“hello”行。总共输出5个“hello”行。

2025-07-20 17:00:48 99

原创 程序可能的输出序列

【代码】程序可能的输出序列。

2025-07-20 16:18:09 60

原创 程序可能的输出序列

父进程输出字符b后,调用waitpid函数挂起,直到子进程输出字符c终止后,再运行输出字符c,执行exit(0)终止。

2025-07-19 10:47:10 166

原创 程序可能的输出

父进程先执行printf("x=%d\n", ++x);后执行 printf("x=%d\n", --x);子进程只执行printf("x=%d\n", --x);

2025-07-18 16:39:59 143

原创 重定位条目信息

B. 确定当模块被重定位时,链接器将修改.data中的哪些数据目标。对于每条这样的指令,列出它的重定位条目中的信息:节偏移、A. 确定当模块被重定位时,链接器将修改.text中的哪些指令。对于每条这样的指令,列出它的重定位条目中的信息:节偏移、b) 可重定位目标文件的.text节。c) 可重定位目标文件的.data节。图1是程序C代码及可重定位目标文件的.text节和.data节。节偏移 : 0x000000004。重定位类型: R_386_32。符号名字: x。

2025-07-18 10:37:35 139

原创 静态链接器

​在命令行中,如果定义一个符号的库出现在引用这个符号的目标文件之前,那么引用就不能被解析,链接就会失败。关于库的一般总则:将库放在命令行的结尾。另一方面,如果库不是相互独立的,那么它们必须排序,使得对于每个被存档文件的成员外部引用的符号s,在命令行中至少有一个s的定义是对s的引用之后的。如果需要满足依赖需求,可以在命令行上重复库。​

2025-07-15 17:02:43 294

原创 链接器如何解析多重定义的全局符号

函数和已初始化的全局变量是强符号,未初始化的全局变量是弱符号。不允许有多个强符号;如果有一个强符号和多个若符号,选择强符号;如果有多个弱符号,从中任意选择一个。

2025-07-15 16:33:27 129

原创 可重定位目标文件的符号表

由swap.c的函数版本,得到 swap.o定义或引用的符号,按照要求填写表1。

2025-07-15 15:56:06 192

原创 整型数的循环左移和循环右移

整型数x,循环左移n位,n大于等于0小于16,比如,x=0x1234,n=4,则循环左移4位后,x=0x2341。n的取值范围不变,循环右移n位,比如,x=0x1234,n=4,则循环右移4位后,x=0x4123。

2025-07-10 10:43:33 150

原创 负整数的机器表示

运算结果: -12345的原码、补码和反码依次是:0xB039、 0xCFC7和0xCFC6。负整数可以表示为原码、补码和反码。

2025-07-08 10:51:24 208

原创 16进制整数转换为10进制整数

16进制整数x>0时,由低到高位分离16进制位,每分离出1位时,让其乘以权值后加到和中,一直到x=0时,得到10进制数。当16进制整数x=0时,不需要做变换;当x<0时,用0减去x绝对值的10进制数,就行。

2025-07-06 10:14:59 218

原创 旋转磁盘的价格

旋转磁盘的价格从20000年的每MB0.01美元下降到了2010年的0.0003美元。按照这种趋势延续下去,估计到哪一年可以以500美元的价格买到一个1PB(假设美元价值不变(没有通货膨胀)。

2025-07-05 15:19:35 104

原创 从磁盘上读文件所用时间

对于下面的情况,假设程序顺序地读文件的逻辑块,一个接一个,将读/写头定位到第1块上的时间是。2. 随机的情况:如果块是随机的映射到磁盘扇区的,估计读这个文件的时间。逻辑块被随机的映射到扇区上,读3000个扇区中的每一个都需要。3MB字节文件的逻辑块数量。大约需要的扇区数量是3000个。,计算得到16500ms.

2025-07-05 10:07:24 227

原创 高速缓存为什么要用中间位作索引

采用高位索引,连续的存储器块就会映射到相同的高速缓存组。如果一个程序有良好的空间局部性,顺序扫描一个数组的元素,那么,在任意时刻,高速缓存只能保存一个块大小的数组内容。高速缓存的使用效率就很低。采用中间位为索引,相邻的存储器块会映射到不同的高速缓存组。高速缓存能存储自身容量的数组片。

2025-07-03 18:14:54 185

原创 CPU从有TLB和高速缓存的系统中读字节数据

CPU执行一条读虚拟地址0x036a处字节的加载指令,MMU抽取出VPN和VPO,检查TLB命中,将缓存的PPN返还给MMU。MMU把PPN和VPO连接起来形成物理地址,然后发送物理地址给高速缓存。高速缓存从物理地址中抽取出CO、CI和CT,检测到一个命中。高速缓存把请求的数据返回给CPU。

2025-07-03 16:01:10 305

原创 确定c语言代码的高速缓存性能

分析三个函数在高速缓存上的性能。

2025-07-01 10:34:26 441

原创 判定算法在数据高速缓存上的效率

由于代码采用的是行方向上步长为 1 的引用模式,因此每条缓存行的未命中模式是:先出现一次未命中,随后出现 7 次命中。对于每对结构体,首次访问时会因缓存未预热(cold miss)而未命中,随后会有5次命中。由于每条缓存行能容纳两个结构体,因此这些引用中有一半会命中缓存,另一半则未命中。由于缓存无法容纳整个数组,在对数组后半部分进行列方向扫描时,会将在扫描前半部分时加载到缓存中的行逐出。因此,对于每一个结构体,都会出现一次未命中,随后是 3 次命中。唯一的存储器访问是对square数组中的元素。

2025-06-26 10:38:26 450

原创 组相联高速缓存的读写

高速缓存是2路组相联的(E=2),块大小为4字节(B=4),有4个组(S=4)。A. 指出用来确定CO、CI和CT的字段。B. 对于下面的存储器访问,当它们是。时,指出是高速缓存命中还是不命中。存储器访问的是1字节的字。存储器是字节寻址的。地址的宽度是12位。

2025-06-25 11:14:24 164

原创 确定数组元素在高速缓存访问的命中情况

缓存的容量不足以同时容纳这两个数组。对其中一个数组的缓存行进行引用时,会将另一个数组最近加载到缓存中的缓存行替换出去。缓存的容量足够大,能够同时容纳这两个数组,因此唯一出现的缓存未命中情况就是最初的冷未命中(即程序刚开始运行时,缓存为空,首次访问数据时产生的未命中)。

2025-06-25 10:34:29 178

原创 确定高速缓存的参数

m是物理地址的位数,C是高速缓存的大小(数据字节数),B是以字节为单位的块大小,E是相联度,S是高速缓存组数,t是标记位数, s是组索引位数,b是块偏移位数。

2025-06-25 09:38:37 132

原创 从L1中读数据需要的周期数

Intel Core i7的时钟频率为2.67GHZ,L1 d-cache的最大吞吐量为6500GB/s,估算从L1 d-cache中读一个8字节的字所需要的时间?(以CPU周期数为单位)。读一个字节需要的周期数。8个字节 = 所需周期数。

2025-06-24 17:27:55 148

原创 确定代码的高速缓存性能

SimAquarium游戏的核心是一个紧密循环(tight loop),它计算256个海藻的平均位置。在一台具有块大小为16字节(B=16),整个大小为1024字节的直接映射数据缓存的机器上测量它的高速缓存性能。

2025-06-23 11:01:32 301

原创 组相联高速缓存的读操作

地址的宽度是13位。高速缓存是2路组相联的(E=2),块大小为4字节(B=4),有8个组(S=8)。4个地址为: 0x064C、 0x064D、0x064E、 0x064F。高速缓存的内容如下图,所有的数字都是以16进制表示的。列出在组3中会命中的16进制存储器地址。存储器访问的是1字节的字。存储器是字节寻址的。

2025-06-20 09:55:33 146

原创 矩阵的转置

采用循环展开,把  𝑁×𝑁  的矩阵A转置为矩阵B。提高性能。

2025-06-19 14:41:41 201

原创 冒泡法排序并求交换次数

数组A有10个元素,初始化采用的是从大到小的顺序排列,要变为从小到大的顺序排列,交换次数就是。若一个数组有n个数据,要求从小到大的顺序排列,采用冒泡法实现,则元素最多交换次数为。程序执行结果cnt=45。

2025-06-17 10:11:55 158

原创 递归求和函数

递归函数rSum求数组元素的和,递归函数AbsSum1求数组元素绝对值的和,采用的是条件跳转语句,递归函数AbsSum2求数组元素绝对值的和,采用的是条件传送语句。

2025-06-16 17:29:08 126

原创 计算流水线

硬件系统采用流水线设计,可以提高吞吐量。

2025-06-16 10:15:11 183

原创 寄存器的使用

寄存器需要在主程序和过程中使用时,在被过程使用前,需要先把它们的内容入栈保存。如果只在过程中使用时,程序可直接修改这些寄存器的值。在过程的结尾,压入栈中的数据要被恢复。

2025-06-15 15:23:22 233

原创 向量的前置和

函数psum1( )中引入变量last_val保存p1[i-1],减少访问存储器的次数,提高计算效率。函数psum3( )使用循环展开,每次迭代计算数组p2三个元素,也能提高效率。

2025-06-15 11:14:25 175

原创 多项式求和

y=a0+a1*x+a2*x*x+...+an*x^n, 用for循环可以方便求得多项式y的值。使用两次循环展开,两路并行。可以提高性能。

2025-06-11 17:33:42 192

原创 计算向量的内积

使用4次循环展开,并且使用两路并行。利用了功能单元的流水线能力。

2025-06-11 16:11:05 107

原创 由汇编代码确定C函数

对于C函数loop_while(), GCC产生如下的汇编代码。

2025-06-10 17:31:59 216

原创 用递归法(recusive method)求n的阶乘

通过递归调用函数,实现。

2025-06-10 10:28:47 225

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除