`

程序优化之存储器别名使用

cOS 
阅读更多
说明:本文示例摘自《深入理解计算机系统》第五章----优化程序性能。

在程序优化时,对于这样一种现象不得不注意,即存储器别名使用。
那么什么是存储器别名使用呢?
简单来说,就是“两个指针可能同时指向同一个存储地址的情况”。

示例为证,考虑下面的代码序列:
x = 1000;
y = 3000;
*q = y;
*p = x;
t1 = *q;

最终t1是多少呢?可能很多人会不假思索就回答3000,然而事实上它是完全有可能等于1000的,这种情况取决于指针p和q是否指向同一个地址,即p是否等于q。

再来看另一个例子:
void twiddle1(int *xp,  int *yp){
    *xp += *yp;
    *xp += *yp;
}

void twiddle2(int *xp,  int *yp){
    *xp += 2 * *yp;
}

乍一看,这两个函数似乎相同,其实不然,同样的道理,这样认为的人还是忽视了存储器别名使用的情况,但xp与yp都指向同一片内存时,差异就显示出来了,前者中xp的值会增加4倍,而后者却只增加3倍!

这样的例子还有很多,比如遇到全局变量时,如下例:
int f();

int func1(){
    return f() + f() + f() + f();
}

int func2(){
    return 4*f();
}


此时又如何呢?它们一定会返回同样的结果吗?非也!比如出现这样的情况:
int counter = 0;

int f(){
    return counter++;
}


注意此时在func1中f()调用了4次,最终结果为 0+1+2+3= 6, 而func2中却只调用了1次,最终结果为4*0=0!!!

很神奇,不是吗?!所以在优化程序时,知道该注意什么了吧?
存储器别名使用!请深深将其烙印在你脑海中!
分享到:
评论

相关推荐

    STM32F2技术培训 存储器和总线架构

    本节将深入探讨该系列微控制器的存储器与总线架构,帮助开发者更好地理解其内部工作原理及优化策略。 #### 二、多层AHB总线矩阵 多层AHB(Advanced High-performance Bus)总线矩阵是STM32F2的一个关键特性,它...

    ARM存储器组织和异常中断习题页PPT教学课件.pptx

    ARM存储器组织和异常中断是嵌入式系统设计中的核心概念,主要涉及到数据的存储方式、存储层次结构、片上存储器的使用以及异常中断的处理机制。在ARM架构中,存储器组织对于系统的性能和效率有着至关重要的影响。 ...

    基于GNU tools的STM32程序设计入门_v2

    - **程序执行细节**:包括程序的启动流程、如何编译和链接,以及如何使用OpenOCD工具将程序烧录至STM32芯片内部的Flash。 - **程序运行环境**:定义了程序执行时的存储器映射,包括FLASH和RAM的分配情况。 2. **...

    STM32F4xxx参考手册学习摘录1

    程序存储器、数据存储器、寄存器和I/O端口均位于一个4GB的地址空间内,且按照小端格式编码。嵌入式SRAM包括备份SRAM和系统SRAM,其中备份SRAM在STM32F405xx/07xx和STM32F415xx/17xx上有4KB,系统SRAM则有不同大小的...

    高通工具名称查询(别名)

    **图形用户界面**是一种使用图像和图标与计算机程序交互的方式,使用户能够更容易地使用软件。 ##### HDET (High-power detector) **高功率探测器**是一种能够检测高功率信号的设备。在无线通信测试和监控中具有...

    基于cortex-m3内核的嵌入式软件开发

    它可以帮助开发者实现对存储器的保护,防止程序运行时出现错误访问存储器的问题。 - MPU支持多个存储器区域的定义,每个区域可以有不同的访问权限。 3. **调试端口(DAP)** - **DAP**是Cortex-M3内核提供的调试...

    单片机答案解析.doc

    单片机,又被称为微控制器(Microcontroller)和嵌入式控制器(Embedded Controller),是一种将中央处理器(CPU)、存储器(包括数据存储器和程序存储器)以及输入/输出(I/O)接口通过内部总线集成在单一芯片上的...

    dspCx的C语言程序设计PPT学习教案.pptx

    对于程序优化,C54x C语言提供了多种技巧,如内联函数、循环展开和存储器访问优化,以充分利用DSP的硬件特性,提高代码执行效率。 在深入学习TMS320C54x DSP的C语言编程时,理解这些基本元素和它们与ANSI C的异同至...

    第四章ARM存储与异常中断处理.pptx

    ARM处理器的存储体系结构和异常中断管理对于优化程序执行效率和系统响应至关重要。下面将详细讲解这些知识点。 首先,ARM存储器组织包括多种数据类型和存储格式。有符号数和无符号数分别支持8位、16位和32位的大小...

    数字IC设计流程与工具.rar_IC 设计_IC设计_degreeyza_madewhz_数字IC

    - **数字IC**:专指使用二进制逻辑的集成电路,包括微处理器、微控制器、存储器等。 这个压缩包中的"数字IC设计流程与工具.pdf"很可能详细阐述了上述过程,并可能包含对具体工具的使用教程和案例分析,对于学习和...

    24C02 C语言程序

    1. **延时函数的优化**:代码中的`delay()`函数过于简单,应使用定时器或其他方法实现更准确的延时,以提高程序的稳定性和可靠性。 2. **错误处理**:增加错误检测机制,例如在读写操作后检查返回状态,确保数据...

    23.文档处理.ppt

    符号表是编程中的一种实用工具,它提供了变量和常量的别名,使得程序更易读且更少出错。配置信息则涉及到了硬件配置和系统设置,确保设备与软件匹配。 打印预览和页面设置在生成硬拷贝文档时起着重要作用,它们可以...

    Stm32应用笔记

    STM32采用了统一的4GB线性地址空间,将程序存储器、数据存储器、寄存器和I/O端口组织在一起。此外,STM32还支持位段映射技术,可以通过特定的地址计算公式来实现对单个位的访问: \[ \text{bit_word_addr} = \text{...

    关于使用类别索引搜索位置的说明.rar

    "使用类别索引搜索位置.pdf" 这个文件很可能详细介绍了如何在特定的系统或应用程序中实现这一功能,包括可能的算法、优化技巧以及实际操作步骤。对于开发者来说,理解并掌握这种技术能够提升系统的性能,提供更好的...

    计算机组成与系统结构试题整理.doc

    30. **程序控制指令**:改变程序执行流程,如跳转、子程序调用等。 31-32. **Cache目的**:减少CPU访问主存的时间,提高性能。 33-34. **并行级别**:从指令级到程序级,再到作业级,表示并行处理的粒度逐步增大。...

    美国..现代编译原理C语言描述.高清版

    15.7.4 懒惰函数式程序的优化 239 15.7.5 严格性分析 241 推荐阅读 243 程序设计:编译函数式语言 244 习题 244 第16章 多态类型 246 16.1 参数多态性 246 16.1.1 显式带类型的多态语言 247 16.1.2 多态类型的检查 ...

Global site tag (gtag.js) - Google Analytics