• .NET Core底层入门
21年品牌 40万+商家 超1.5亿件商品

.NET Core底层入门

69.37 7.0折 99 九五品

仅1件

北京通州
认证卖家担保交易快速发货售后保障

作者老农,刘浩杨

出版社北京航空航天大学出版社

ISBN9787512431959

出版时间2020-01

版次1

装帧平装

开本16开

纸张胶版纸

定价99元

上书时间2024-12-09

纵列風

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:九五品
商品描述
基本信息
书名:.NET Core底层入门
定价:99.00元
作者:老农,刘浩杨
出版社:北京航空航天大学出版社
出版日期:2020-01-01
ISBN:9787512431959
字数:
页码:
版次:
装帧:平装
开本:16开
商品重量:
编辑推荐
作者提供大量源码链接以及解释数据结构和处理流程的图标。
内容提要
本书讲解了 .NET Core公共语言运行时的底层实现,从介绍MSIL和x86汇编语言开始,到讲解异常、多线程、GC以及JIT编译器的实现原理与实现细节。本书包含了大量图表让读者可以更容易了解其中的内容,同时涉及到 .NET Core底层实现的部分还给出了对应的源代码链接,让读者可以参考源代码有更深入的理解。此外,本书还有相关提问用的仓库和 群便于读者交流,详见序言。本书主要面向有一年以上 .NET (C#)开发经验的开发者,其他程序语言的开发者也可以阅读本书来比较 .NET Core与其他语言的运行时之间有哪些共同点和不同点,本书的知识可以为读者在编写高性能应用或底层应用时提供有力的支持。
目录
章公共语言运行时概述11.1.1.NET框架简介11.1.2公共语言运行时中的各个组成部分31.1.3名称规范5第2章MSIL入门7节逆向 .NET程序到IL72.1.1ildasm72.1.2使用ILSpy102.1.3dnSpy10第2节基础语法112.2.1IL语法格式112.2.2IL指令格式172.2.3评价堆栈182.2.4常用指令192.2.5常见的C#代码与IL代码的对比21第3节流程控制262.3.1IL流程控制262.3.2常见的流程控制C#代码与IL代码对比28第3章x86汇编入门37节汇编与机器码373.1.1理解汇编语言与机器码373.1.2RISC与CISC423.1.3流水线42第2节内存443.2.1位与字节443.2.2负数的表现463.2.3小端与大端473.2.4内存地址473.2.5虚拟内存483.2.6了解虚拟内存的实现50第3节寄存器503.3.1通用寄存器503.3.2程序计数器523.3.3标志寄存器52第4节基础指令553.4.1汇编指令记法553.4.2汇编指令格式563.4.3汇编指令简写573.4.4基础汇编指令583.4.5更多指令683.4.6机器码的编码方式68第5节流程控制693.5.1流程控制实现693.5.2比较指令703.5.3跳转指令733.5.4其他流程控制773.5.5分支预测79第6节函数调用823.6.1栈结构823.6.2函数调用853.6.3enter与leave指令893.6.4调用规范89第7节系统调用913.7.1系统调用简介913.7.2在x86上发起系统调用(软中断)923.7.3在x86上发起系统调用(sysenter)933.7.4在x8664上发起系统调用(syscall)94第8节内存屏障953.8.1乱序执行953.8.2内存屏障简介963.8.3双检锁97第4章编译与调试CoreCLR100节在Windows上编译CoreCLR1004.1.1准备编译环境1004.1.2下载CoreCLR源代码1014.1.3编译CoreCLR1024.1.4使用编译出来的CoreCLR1034.1.5新的编译文档103第2节在Windows上调试CoreCLR1044.2.1使用Visual Studio调试CoreCLR1044.2.2使用WinDbg调试CoreCLR1054.2.3在WinDbg中使用SOS扩展1094.2.4更方便地调试托管方法对应的汇编代码113第3节在Linux上编译CoreCLR113第4节在Linux上调试CoreCLR1164.4.1使用LLDB调试CoreCLR1164.4.2在LLDB中使用SOS扩展119第5章异常处理实现126节异常处理简介1265.1.1通过返回值报告错误与通过异常报告错误的区别1265.1.2.NET中的异常处理129第2节用户异常的触发1325.2.1用户异常1325.2.2通过throw关键词抛出异常1335.2.3调用 .NET运行时内部函数抛出异常1355.2.4JIT编译时自动插入抛出异常的代码1355.2.5CoreCLR中的相关代码137第3节硬件异常的触发1375.3.1硬件异常1375.3.2访问null对象的字段时抛出异常1385.3.3调用null对象的方法时抛出异常1425.3.4对整数进行零除时的处理1445.3.5CoreCLR中的相关代码146第4节异常处理实现1465.4.1异常处理的过程1465.4.2捕捉异常并获取抛出异常的位置1475.4.3通过调用链跟踪获取抛出异常的函数与所有调用来源1485.4.4获取函数元数据中的异常处理表1505.4.5枚举异常处理表调用对应的finally块与catch块1515.4.6重新抛出异常的处理1515.4.7CoreCLR中的相关代码153第5节异常处理对性能的影响154第6章多线程实现158节原生线程1586.1.1原生线程简介1586.1.2上下文切换1596.1.3线程调度1616.1.4栈空间161第2节托管线程1626.2.1托管线程简介1626.2.2托管线程对象1636.2.3创建托管线程的例子1636.2.4前台线程与后台线程1646.2.5CoreCLR中的相关代码166第3节抢占模式与合作模式1666.3.1切换模式的实现1676.3.2CoreCLR中的相关代码169第4节线程本地储存1696.4.1ThreadStatic Attribute属性的实现1716.4.2ThreadLocal类的实现1726.4.3CoreCLR中的相关代码175第5节原子操作1756.5.1原子操作简介1756.5.2.NET中的原子操作1796.5.3无锁算法1826.5.4CoreCLR中的相关代码183第6节自旋锁1846.6.1线程锁1846.6.2使用Thread.SpinWait实现自旋锁1856.6.3使用System.Threading.SpinWait代替1876.6.4使用System.Threading.SpinLock实现自旋锁1886.6.5Thread.Sleep(0)与Thread.Yield的区别1896.6.6使用pause指令的另一个原因1906.6.7CoreCLR中的相关代码190第7节互斥锁191第8节混合锁与lock语句1976.8.1线程中止安全2006.8.2CoreCLR中的相关代码201第9节信号量2046.9.1轻量信号量2066.9.2通过信号量实现生产者—消费者模式2066.9.3通过Monitor类实现生产者—消费者模式2086.9.4CoreCLR中的相关代码2100节读写锁2131节异步操作2166.11.1阻塞操作2166.11.2事件循环机制2176.11.3异步编程模型2196.11.4异步编程模型的实现原理2216.11.5任务并行库2246.11.6任务并行库的实现原理2266.11.7ValueTask2296.11.8async与await关键字的例子2306.11.9async与await关键字的实现原理2316.11.10堆积的协程与无堆的协程2396.11.11CoreCLR中的相关代码2392节执行上下文2426.12.1异步本地变量与执行上下文2426.12.2CoreCLR中的相关代码2473节同步上下文2486.13.1同步上下文的使用例子(基于WinForm)2496.13.2自定义同步上下文实现2526.13.3CoreCLR中的相关代码258第7章GC垃圾回收实现260节GC简介2607.1.1栈空间与堆空间2607.1.2值类型与引用类型2617.1.3.NET中的GC2637.1.4垃圾回收VS引用计数271第2节对象内存结构2717.2.1值类型对象的内存结构2717.2.2引用类型对象的内存结构2737.2.3存活标记与固定标记2767.2.4装箱与拆箱2777.2.5CoreCLR中的相关代码278第3节托管堆结构2807.3.1.NET程序的内存结构2807.3.2托管堆与堆段2827.3.3分配上下文2847.3.4分代的实现2867.3.5自由对象列表2877.3.6跨代引用记录2897.3.7析构对象列表与析构队列2917.3.8CoreCLR中的相关代码291第4节分配对象流程2937.4.1new关键字生成的代码2937.4.2从托管堆分配空间的内部函数2977.4.3分配小对象的流程2997.4.4分配大对象的流程2997.4.5记录包含析构函数的对象到析构对象列表3027.4.6CoreCLR中的相关代码302第5节垃圾回收流程3037.5.1GC的触发3037.5.2执行GC的线程3067.5.3GC的总体流程3077.5.4重新决定目标代3097.5.5判断是否应该执行后台GC3117.5.6CoreCLR中的相关代码312第6节标记阶段3147.6.1获取根对象3147.6.2递归扫描根对象并设置存活标记3157.6.3通过卡片表扫描跨代引用并设置存活标记3187.6.4枚举强引用GC句柄并设置存活标记3187.6.5枚举固定GC句柄并设置固定标记3197.6.6枚举弱引用GC句柄并清空不再存活对象引用3197.6.7扫描析构对象列表并添加不再存活对象到析构队列3197.6.8枚举跟踪复活弱引用GC句柄并清空不再存活对象引用3207.6.9决定是否启用升代3207.6.10CoreCLR中的相关代码321第7节计划阶段3237.7.1构建Plug树3237.7.2构建Brick表3247.7.3模拟压缩3257.7.4判断是否执行压缩与新建短暂堆段3277.7.5CoreCLR中的相关代码328第8节重定位阶段3287.8.1修改对象引用地址3287.8.2CoreCLR中的相关代码330第9节压缩阶段3307.9.1复制对象值3307.9.2结束GC3327.9.3CoreCLR中的相关代码3330节清扫阶段3337.10.1创建自由对象并加到自由列表3337.10.2结束GC3347.10.3CoreCLR中的相关代码3341节后台GC3357.11.1后台标记阶段3357.11.2后台清扫阶段3367.11.3CoreCLR中的相关代码3372节调整GC行为3387.12.1设置GC模式3387.12.2设置延迟模式3397.12.3设置延迟等级3407.12.4开启无GC区域3417.12.5开启大对象堆压缩3427.12.6保留堆段空间地址3427.12.7更多选项(针对 .NET Core)3433节获取GC信息3447.13.1获取GC执行次数3447.13.2注册完整GC触发前的通知3457.13.3在Windows系统上使用ETW捕捉GC事件3477.13.4在Linux系统上使用Lttng捕捉GC事件3507.13.5使用EventListener捕捉GC事件351第8章JIT编译器实现354节JIT简介3548.1.1JIT编译器3548.1.2.NET中的RyuJIT编译器3568.1.3在Visual Studio中查看生成的汇编代码3568.1.4使用JITDump日志查看JIT编译流程与生成的汇编代码357第2节JIT编译流程3588.2.1JIT的触发3588.2.2分层编译3608.2.3JIT编译流程3628.2.4CoreCLR中的相关代码363第3节IR结构3668.3.1HIR与LIR3668.3.2HIR的结构3678.3.3HIR的例子3678.3.4LIR的结构3728.3.5LIR的例子3728.3.6常见的HIR结构3768.3.7CoreCLR中的相关代码382第4节IL解析3838.4.1创建本地变量表3838.4.2创建基础块列表3838.4.3创建异常处理表3848.4.4构造语法树3858.4.5CoreCLR中的相关代码386第5节函数内联3878.5.1内联的条件3888.5.2内联的处理3898.5.3CoreCLR中的相关代码390第6节IR变形3908.6.1添加内部代码3908.6.2提升构造体3918.6.3标记暴露地址的本地变量3938.6.4对基础块中的各个节点进行变形操作3938.6.5消除三元条件运算节点3968.6.6CoreCLR中的相关代码398第7节流程分析3998.7.1计算前任基础块与后任基础块3998.7.2计算边缘权重(Edge Weight)4008.7.3调整基础块顺序4008.7.4计算可到达的基础块4008.7.5计算支配与支配边界4018.7.6插入GC检测点4028.7.7添加小函数4028.7.8CoreCLR中的相关代码403第8节本地变量排序4048.8.1根据引用计数排序本地变量4048.8.2CoreCLR中的相关代码404第9节评价顺序定义4058.9.1决定语法树节点的评价顺序4058.9.2CoreCLR中的相关代码4050节变量版本标记4068.10.1SSA4068.10.2构建SSA4078.10.3构建VN4108.10.4CSSA与TSSA4118.10.5CoreCLR中的相关代码4111节循环优化4138.11.1循环的结构4138.11.2循环反转4158.11.3循环克隆4168.11.4循环展开4178.11.5循环不变代码外提4188.11.6CoreCLR中的相关代码4192节赋值传播4208.12.1替换拥有相同值的变量4208.12.2CoreCLR中的相关代码4213节公共子表达式消除4218.13.1合并拥有相同值的表达式4218.13.2CoreCLR中的相关代码4224节断言传播4248.14.1生成并传播断言4248.14.2CoreCLR中的相关代码4255节边界检查消除4268.15.1根据断言消除边界检查4268.15.2CoreCLR中的相关代码4276节合理化4278.16.1转换HIR结构到LIR结构4278.16.2转换LCL_VAR节点4288.16.3转换ADDR与IND节点4288.16.4删除COMMA节点4308.16.5CoreCLR中的相关代码4307节低级化4318.17.1分割针对long类型的操作4318.17.2转换算术运算到地址模式4318.17.3转换除法运算和求余运算4318.17.4转换SWITCH节点4338.17.5针对函数调用添加PUTARG_REG与PUTARG_STK节点4358.17.6转换CALL节点4368.17.7标记节点是否为被包含节点4408.17.8标记节点被使用时是否需要先加载到CPU寄存器4408.17.9CoreCLR中的相关代码4418节线性扫描寄存器分配4428.18.1寄存器分配4428.18.2线性扫描寄存器分配简介4428.18.3CoreCLR中的相关代码4509节汇编指令生成4518.19.1计算帧布局4518.19.2生成汇编指令4538.19.3包含异常处理小函数的汇编代码4568.19.4CoreCLR中的相关代码459第20节机器代码生成4608.20.1生成机器码与元数据4608.20.2CoreCLR中的相关代码463第21节函数头信息4648.21.1除错信息的结构4658.21.2异常处理表的结构4668.21.3GC信息的结构4668.21.4函数对象的结构4678.21.5栈回滚信息的结构467第22节AOT编译4688.22.1使用.NET Framework的NGen工具执行AOT编译4698.22.2使用.NET Core的CrossGen工具执行AOT编译469附录A中英文专业名词对照表472附录B常用IL指令一览480附录C常用汇编指令一览485附录DSOS扩展命令一览489附录EIR语法树节点类型一览517参考文献523
作者介绍
老农,开源MVC框架ZKWeb的作者,对C++和x86汇编有多年研究,熟悉逆向分析和性能优化。刘浩杨,高级软件工程师,关注应用性能管理(APM)和高级语言虚拟机实现,熟悉Web应用性能优化,对MSIL和CLR有深入了解。开源爱好者,开源AOP框架AspectCore作者,Apache SkyWalking APM的.NET Core探针作者。
序言

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP