程序员的自我修养
拉普拉斯妖1228
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《程序员的自我修养》(三)——库与运行库
库与运行库内存应用程序使用的内存空间一般都会包括以下“默认”区域:栈:栈用于维护函数调用的上下文。通常栈在用户空间的最高地址处分配,可能会有数兆字节的大小。堆:堆是用于容纳应用程序动态分配的内存区域,当程序使用malloc或new分配内存时,得到的内存来自堆里。堆通常存在于栈的下方(低地址方向),在某些时候,堆也可能没有固定统一的存储区域。堆一般比栈大得多,可以有几十到数百兆字节的容...原创 2019-11-17 16:39:25 · 311 阅读 · 0 评论 -
《程序员的自我修养》(二)——装载与动态链接
装载与动态链接可执行文件的装载与进程每个程序都拥有自己独立的虚拟地址空间,这个空间大小由计算机硬件平台决定(理论上的最大上限)。比如,32位硬件平台的虚拟地址空间的地址为0到232-1,即0x000000000xFFFFFFFF,总共大概4G;而64位硬件平台的虚拟地址空间地址为0到2<sup>64</sup>-1,即0x00000000000000000xFFFFF...原创 2019-11-17 16:38:38 · 253 阅读 · 0 评论 -
《程序员的自我修养》番外笔记——符号解析与重定位
程序如下:重定位先来看这段代码的反汇编结果。"main"的起始地址为0x00000000,这是因为在未进行空间分配之前,目标文件代码段中的起始地址以0x00000000开始,等到空间分配完成以后,各个函数才会确定自己在虚拟地址空间中的位置。偏移为0x18的地址上是一条mov指令,总共8个字节,它的作用是将“shared”的地址赋值到esp寄存器+4的偏移地址中去,前面4...原创 2019-11-17 16:37:22 · 307 阅读 · 0 评论 -
《程序员的自我修养》(一)——编译与静态链接
简介温故而知新计算机科学领域的任何问题都可以通过增加一个间接地中间层来解决。在UNIX中,硬件设备的访问形式跟访问普通的文件形式一样;在Windows系统中,图形硬件被抽象成了GDI,声音和多媒体设备被抽象成了DirectX对象,磁盘被抽象成了普通文件系统,等等。如何将计算机上有限的物理内存分配给多个程序使用。整个想法是这样的,我们把程序给出的地址看作是一种虚拟地址,然后通过某些映射的方...原创 2019-11-17 16:34:42 · 191 阅读 · 0 评论
分享