程序员自我修养
David 's blog
这个作者很懒,什么都没留下…
展开
-
【读书笔记】关于段错误,重定位,EFL文件格式
(由于昨天的写博客遇到的问题,重新翻了下【程序员的自我修养】,时隔5~6个月,再次翻开,体会真是不一样。发现了很多细小的知识点,有的是以前冥思苦想的,有的是学习过程中没注意但是又很重要的。写这篇博客主要做一个汇总)1.关于Segmentation fault程序可以任意使用4G虚拟地址空间呢?不行。程序的运行在操作系统的监管下,进程只能使用那些操作系统分配给进程的地址,进程的虚拟地址在操...原创 2019-04-20 14:44:24 · 582 阅读 · 0 评论 -
【读书笔记】虚拟地址的概念?分页分段的概念
一、虚拟地址概念由来早期计算机中,程序直接运行在物理内存,也就是说,程序在运行时所访问的地址都是物理地址。那么如果一台计算机只运行一个程序,只要这个程序要求的物理内存空间不超过物理内存的大小,就不会出问题。但是!为了高效利用硬件资源(CPU、内存、IO设备),计算机一定要同时运行多个程序,那么多个程序直接运行在物理内存上,可能会出现不可描述的未知错误,比如:“如何将计算机有限的内存分配给多...原创 2019-05-07 16:52:56 · 691 阅读 · 0 评论 -
【读书笔记】关于++i是否线程安全的分析?
(之前春招的笔试题中,看到过很多次++i、原子操作的题,这篇博客就做一个分析。)什么是原子操作?即单指令的操作,单指令操作是不可打断的。再回顾i++和++i:i++和++i都是i=i+1的意思,但是过程有些许区别:i++:先赋值再自加。(例如:i=1;a=1+i++;结果为a=1+1=2,语句执行完后i再进行自加为2)++i:先自加再赋值。(例如:i=1;a=1+++i;结果为...原创 2019-05-07 17:33:01 · 819 阅读 · 0 评论 -
【Linux】在可执行程序中动态库和静态库的区别?静态链接、动态链接?各自有什么缺点?
什么是库文件?库文件是事先编译好的方法的合集。比如:我们提前写好一些数据公式的实现,将其打包成库文件,以后使用只需要库文件就可以,不需要重新编写。库文件分两种:静态库和动态库(也叫共享库)Windows系统静态库扩展名为:.lib 动态库扩展名为.dll;Linux系统下静态库的扩展名为.a 动态库的扩展名为.so;一、静态库(也称作归档文件):简单来说就是一组“准备好使用”状态...原创 2019-04-19 18:31:20 · 4307 阅读 · 2 评论 -
【c++】函数调用过程,4种调用约定
一、什么是栈1.定义:栈:数据结构中的栈,是一个容器,先进后出的属性;计算机系统中,栈是具有以上属性的动态内存区域,程序将数据压入栈,也可以从栈顶弹出,压栈使栈增大,出栈使栈减小,栈总是向下增长(由高地址向低地址);如图4G虚拟地址空间布局:ZONE_DMA的范围是0~16M,该区域的物理页面专门供I/O设备的DMA使用。之所以需要单独管理DMA的物理页面,是因为DMA使用物理...原创 2019-07-19 12:08:25 · 1035 阅读 · 0 评论 -
Linux基础:预编译、编译、汇编、链接
四:预编译、编译、汇编、链接//详情参考《程序员的自我修养》1-6章精简版://在原文基础上做补充和修改参考原文:https://blog.csdn.net/weixin_40740059/article/details/84075653如图:c程序的4G虚拟地址空间划分:在text段中,只有普通局部变量是指令int gdata1 = 10; /...原创 2018-11-19 13:34:26 · 2237 阅读 · 0 评论 -
【Linux】系统调用实现原理(中断、特权、用户态内核态)
参考《程序员的自我修养》第十二章:系统调用与API(这章篇幅很短,20多页,1个小时便可以读完)一、系统调用与库函数1.系统调用函数是系统内核抛出来给用户空间调用的接口,系统调用由用户态调用,在内核态执行。系统调用的功能广泛,例如创建/退出进程和线程、进程内存管理、对系统资源访问如文件、网络、进程间通信、硬件设备等。Linux上使用0x80号中断作为系统调用的入口;Windows上...原创 2019-07-20 12:19:35 · 1160 阅读 · 0 评论