计算机
中间层惹的祸
所有计算机科学中的问题都能通过增加一个中间转换层来解决
All problems in computer science can be solved by another level of indirection
某种程度上,这种被动解决问题的方式使计算机软硬件的一系列发展只不过是惯性向前,看起来顺理成章,然而几乎所有从业者的智慧都浪费在不断学习和构建新的中间层,身不由己的推动这个庞然大物继续膨胀。忽然感觉索然无味,很无聊啊。
Cache (内存好慢)
image.png image.pnghttp://cenalulu.github.io/linux/all-about-cpu-cache/
https://zhuanlan.zhihu.com/p/35386457
https://www.cnblogs.com/yanlong300/p/8986041.html
http://0xffffff.org/2017/02/21/40-atomic-variable-mutex-and-memory-barrier/
进程地址空间
进程地址空间多线程地址空间
image.png image.pngimage.png image.png
Text Segmest 和 Data Segment
Text Segment,包含.text段、.rodata段、.plt段等。是从/bin/bash加载到内存的,访问权限为r-x。
Data Segment,包含.data段、.bss段等。也是从/bin/bash加载到内存的,访问权限为rw-。
堆和栈
堆(heap):堆说白了就是电脑内存中的剩余空间,malloc函数动态分配内存是在这里分配的。在动态分配内存时堆空间是可以向高地址增长的。堆空间的地址上限称为Break,堆空间要向高地址增长就要抬高Break,映射新的虚拟内存页面到物理内存,这是通过系统调用brk实现的,malloc函数也是调用brk向内核请求分配内存的。
栈(stack):栈是一个特定的内存区域,其中高地址的部分保存着进程的环境变量和命令行参数,低地址的部分保存函数栈帧,栈空间是向低地址增长的,但显然没有堆空间那么大的可供增长的余地,因为实际的应用程序动态分配大量内存的并不少见,但是有几十层深的函数调用并且每层调用都有很多局部变量的非常少见。
内存管理
https://www.cnblogs.com/fuzhe1989/p/3950179.html
https://blog.csdn.net/Apollon_krj/article/details/54565768
https://www.cnblogs.com/huxiao-tee/p/4660352.html
https://blog.acean.vip/post/linux-kernel/gai-shu-linuxnei-he-san-jia-ma-che-zhi-nei-cun-guan-li
https://gist.github.com/CMCDragonkai/10ab53654b2aa6ce55c11cfc5b2432a4