标签:code 聚合 链接器 系统时钟 输入 必须 日期 过程 动态
本周速读了《深入理解计算机系统》这本书,这本书从程序员的角度介绍了计算机系统的内在运作,展示了一些本质概念是如何实际的影响应用程序的正确性、性能和实用性的。收获如下:
IA32采用了一组统一的寄存器使用惯例,根据惯例,寄存器eax、edx、ecx被划分为调用者保存寄存器,当过程P调用Q时,Q可以覆盖这些寄存器,二不会破坏任何P所需要的数据;ebx、esi、edi被划分为被调用者保存寄存器,这意味着Q必须在覆盖这些寄存器之前,将这些寄存器中的值保存到栈中,并在返回前恢复它们,因为P可能会在今后的计算中需要这些值。由此根据惯例,必须保持寄存器ebp、esp。
Gene Amdahl做出了一个关于提高系统一部分性能的效果的简单但富有洞察力的观察,被称为Amdahl定律。其主要思想是当我们加快系统一个部分的速度时,对系统整体性能的影响依赖于这个部分有多重要和速度提高了多少。
考虑一个系统在其中执行某个应用程序需要时间t,设系统某部分需要这个时间的百分比为a,二我们将它的性能提高到了k倍,因此整个执行时间为T=(1-a)t+(at)/k=t[(1-a)+a/k],由此可以得出加速S=1/[(1-a)+a/k]。例如原来占用60%时间的部分提高到了三倍即a=0.6,k=3,此时加速S=1.67。可以看出我们大幅度改进了系统的一个主要部分,但是净加速还是很小。
所以Amdahl定律的主要观点就是要想大幅度提高整个系统的速度,必须提高整个系统很大一部分的速度。
重定位由两步组成:
使用这个库函数查询系统时钟以确定当前的日期和时间。这个函数把时间写入到一个调用者传递过来的结构中,这个结构包括一个单位为s的字段,还有一个单位为μs的字段。
垃圾收集器是一种动态存储分配器,它自动释放程序不再需要的已分配块,这些块被称为垃圾。自动回收堆存储的过程叫做垃圾收集。在一个支持垃圾收集的系统中,应用显式分配堆块,但从不显式地释放它们。在C程序的上下文中,应用调用malloc,但从不调用free。垃圾收集器定期识别垃圾块,并相应地调用free,将这些块放回空闲链表中。
标签:code 聚合 链接器 系统时钟 输入 必须 日期 过程 动态
原文地址:https://www.cnblogs.com/fanxiaonan/p/11746217.html