读书笔记:程序员的自我修养x

读书笔记:程序员的自我修养x

ID:39709862

大小:261.76 KB

页数:20页

时间:2019-07-09

读书笔记:程序员的自我修养x_第1页
读书笔记:程序员的自我修养x_第2页
读书笔记:程序员的自我修养x_第3页
读书笔记:程序员的自我修养x_第4页
读书笔记:程序员的自我修养x_第5页
资源描述:

《读书笔记:程序员的自我修养x》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、程序员的自我修养读书笔记shiquany@gmail.com南桥:链接慢速设备,比如键盘,USB,磁盘北桥:链接快速设备,比如CPU,Memory磁盘:每个盘片有两个盘面,每个盘面划分为多个磁道,每个磁道划分为多个扇区,一般每个扇区存储512B数据程序直接访问物理内存;分段;分页线程与可以调度的进程之间的关系:1VS1,nvs1,mVSn,其中RedHat开发的NPTL是第一种,所以看起来线程频繁切换的调度开销会比较大通过控制.ctorand.dtor应该可以控制全局变量的析构顺序。并且如果将所有的全局变量定义在一个cpp里面,其

2、余只是引用应该可以保证构造和析构顺序的。但是这有时候好像挺难的,因为不符合模块化设计原则线程优先级的改变用户设定优先级根据等待的频繁程度提升或者降低优先级,频繁等待I/O的线程被提升的可能性就大长时间得不到执行的线程被提升优先级Linux的执行实体是Task,不同Task之间可以share内存和文件,所以本质上就是线程Volatile阻止编译器将变量放入寄存器而不写会阻止编译器将操纵该变量的语句调序修饰代码的时候则是指不要对以下语句做任何优化Memorybarrier阻止编译器对指令进行调序,barrier两端的代码一定不会被调序

3、编译过程预编译编译汇编链接可执行文件格式:Windows:PE(portableexecutable)Linux:ELF(executablelinkableformat)均来自于COFF(Commonfileformat)ELFfiletypes(shellcommand:file)Re-locatablefile:code,data(*.o),staticlibExecutablefile:(runnable)Sharedobjectfile:*.soCoredumpfileELFfilestructureELFheader.

4、text(programtext).bss(uninitializedglobaldata,notoccupyspace).data(initializedglobalandlocalstaticdata).rodata(readonlydata).comment自定义段:__attribute__((section(“x”)))intglobal_var=3;__attribute__((section(“x”)))voidprint();ELF文件格式定义:/usr/include/elf.h文件中定义Magicnumber,

5、在文件和一些内存结构中常常定义一些magicnumber用于确保该文件是有效的或者放置内存被写坏Ld静态链接时的一些特殊地址__executable_start:程序起始地址__etext:代码段结束地址__edata:数据段结束地址__end:程序结束地址Namedecoration&&functionsignaturefoo->_foo(Cprogramming)foo->_foo_(Fortran)IntC::foo(string):_ZN1C3fooEs_ZN:fixedprefixSizeofnamespaceorcla

6、ssnameNameofnamespaceorclassnameE:fixedstringParatypeSowecanknowwhyreturnvaluecannotdifferentiateoverloadingmethodinc++,becausemethodsignaturedoesnotincludereturntype强符号和弱符号强符号:初始化的全局变量,函数弱符号:未初始化的全局变量__attribute__((weak))可以显式定义一个弱符号强符号不允许重复定义弱符号如果有重定义则分配空间按照大的那个强引用和弱

7、引用不允许未定义的强引用允许未定义的弱引用__attribute__((weakref))可以显示定义弱引用弱引用的好处是允许程序link用户自定义的方法,库;如果用户未定义的时候,则会link系统默认的方法,库gcc–g加入调试信息到执行文件标准调试信息格式:DWARF(debugwitharbitraryrecordformat)调试信息会比较大,[stripx]可以去除调试信息,但是不建议因为线上调试很困难ld–e一般采用两步链接(twopasslinking)读取所有输入文件,计算文件中各个段所需空间将各个文件的同名段me

8、rge起来,并根据全局符号表调整地址实际运行环境中,ld常被collect2代替,主要处理全局变量构造/析构的问题绝对地址修正:S+A相对地址修正:S+A-PS:符号地址A:被修正位置的值P:被修正的位置COMMON块未初始化的全局变量是弱符号,在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。