没有合适的资源?快使用搜索试试~ 我知道了~
编程新手真言 我写这些东西只为自娱,任何组织和个人都可转随便转载这里面的任何一个字(自创字和别字除外),知识是事物之间的联系,那么实践就是强化或深入这些联系的方法
资源推荐
资源详情
资源评论
本书目录
本书目录
1.
1.
《硬件,平台,网络》----------------------------------------------------0--10
2.
2.
《C++与JAVA》---------------------------------------------------------10--36
3.
3.
《面向对象与面向构件》------------------------------------------------36--56
4.
4.
《设计模式与方法论》----------------------------------------------------56-62
现在进入《硬件,平台,网络》,这一节的几篇文章是我老早写的,所以请直接进入第二章
机器,平台与网络
By MuziSoft07
By MuziSoft07
1.
1.
前言
2.
2.
真正的保护模式
3.
3.
真正的二进制
4.
4.
真正的文件
5.
5.
真正的数据
6.
6.
真正的
真正的
Windows
Windows
消息
消息
7.
7.
设备环境
8.
8.
真正的
MFC
9.
9.
真正的并发性
10.
10.
常见或不常见术语
前言:
前言:
我写这些东西只为自娱,任何组织和个人都可转随便转载这里面的任何一个字(自创字和别字
除外)
知识是事物之间的联系,那么实践就是强化或深入这些联系的方法
我常想,到底是什么重要,是认知还是技能,人们普遍认为实践应在任何情况下都高于认识,
事实是:可能有技能但是没有认知,但却不可能有认知但没有技能,只有格物至知,先格物,
认识到了一定程序后就会产生对事物本质的认识,也可先认识事物本质再在指导下去发展技
能,,,技能与认识,认知可以直接传递给你(至此只是一个你所能想象得到的浅层和大概,而且
除非实践,这个大概形象你也不知道它到底是正确的还是错误的,更深层的你想象不到的抽
象以及关于这些认识的正确性要求实践),而实践不能被直接传达
看英语报纸也是实践,因为它也能够加强你实际使用英语的能力,
知识的获得与能否运用知识本身无必然因果,拥有足够的知识,再加上泛型的思维,,你就
会快速得以实践
所以说实践和认知都是重要的,没有谁比谁更重要的说法,然而对于初学者来说浅层认知的
重要性要高于实践,一开始就有一个好的思想和基础显然可以为未来的实践扫清障碍
因此,即便这个浅层的认知,也是无比重要的
因为学习是一个层次上升阶段,在拥有一定知识后,理解基于这些知识之上的更高层知识会
很快,, 即掌握了基础再加上一定勤奋的博物广识,知识量是几何级上升的,因此一种很好的学
习方法是,学习应该先吞,(在一定知识量的前提下尽可量地博物广识,即使看不懂也要浏
览完,以获得浅层的认知继续下一步学习),这是自然而痛苦的过程,
我们鼓励在实践基础上去学习,也提倡速成,我认为学习不应该提倡逐步深入,人的生命有
限,染启超在渡日的般上一夜之间学会日语,这就是说他掌握了思想,细节的东西永远是后来
的,只要思想是重要的
掌握了思想和基础后,每天写小程序,编程能力就会日渐提高,而当你写过和分析过很多程序
之后,你就会具备一眼看出的本事,过程的最后你发现自己蛹变蝶飞了
学习应首先理解框架,然后是细节,就好像在一个大型应用中,编译跟汇编并不会走二个极
端一样,学习往往是混合了这二个过程的过程,,,矛盾和老子的不可绝对在这里起作用
所以说思想和基础永远是重要的,,
对于计算机专业来说,为什么也才那么几门课程 (高数线代离散,编译原理,C 与算
法,Java),,因为这些学科是最重要的
比如拿编程语言来说,只要越过语言的表达这一层,我们才能用语言表达和理解事物 (语言
跟你要说的话就像用 C++语言去表达一个算法,方案领域跟应用领域的对应),就像口才,一
个好口才的人说话时绝对不会想到措词,因为语言已经成为一种意象,只要把一样东西思想
化,才能超越这个东西而去想到别的东西而长足发展,比如面向对象,这本书将帮你解释为
什么面向对象是一种科学的机制,解释的过后你甚至会觉得这是一种本来就该存在的很亲切
的机制,只要超越了面向对象我们编程时,再加上一定设计模式,才能真正不会一动手编程
就考虑什么是面向对象之类。。而这些,好像都是一个高手所能做的事了,)。
编程时碰到的信息量永远是巨大的,有生之年我们不可能掌握这些信息的来龙去脉,对于程
序员来说,提供一个关于它的编程参考文档可以说是掌握了此信息,因为这个文档就是这个
信息的大概,实际上我们编程大部分情况下都只是用第三方的代码库来编程,这个信息用于
编程所需的全部东西,对于编程来说只要掌握这些东西就行),换句话说,一些知识如果不能
理解就得先放(以后总会弄懂它的吧?又不是为了应付临时的考虑!), 在这个信息的社会,
至于信息,是撞事学事!一个程序员并不全知全能,它只提取和了解事物对于编程方面的信
息。对于事物的逻辑认识,只能在对它的编程中不断掌握它
问题随之而来,既然存在这个界限,又如何突破,否则这就是一个空谈
多走弯路,学习是认识事物间联系的过程,而记忆或实践是加强这个联系的过程,,能够认
识到事物之间的联系,即便是自想的联系也可加深对事实的记忆(一个程序员有他自己的知
识体系是重要的),这就是知识
一切东西,我们应该查本究源,深入其原子世界,, 翻译过很多文章你就知道要措词,措词跟概
念有关,二个稍微相差不大的措词都会让读者摸不头脑或让他们恍然大悟。
我们高中做到了英语的相似名词不同分析,本书也打算在一定程序上这样做(虽然计算机技
术领域一个概念可以自成一书这种现实不允许我们这样做),咬文嚼字在这里起作用,,在
某些情况下,它是一种好习惯!
然而千万不要走入另外一种极端, ,知识用词和技术用语没有一个标准,比如方法和函数指的
是同一个东西
什么是线性,什么是离散,这都是仁者见伍,智者见,但人们对此的理解都不会差到那里去,
并且也不会影响后来的学习,这里有一个描述或形式的概念,相信大家都还记得初中学过的
集合,是描述性概念,但集合其实还有一个形式概念,给定了形式就可以框死
而且,要知道,即使是《虚拟机的原理与设计》这本书的作者也会对别人书里的进程概念感
到不解。
我注意到程员序考试中多了一项标准化,的确,知识的传达也需进入标准化时代了
最后,如果说任何行为都是功利的,,那么我写这本书的目的只为博你一笑
,,,
,,,
真正的保护模式
8086/8088 有 20 根地址线,寄存器为 16 位
寄存器的位数,16 位表示决定了计算机的字长,即一次性能处理的数据总长度(16 个位,始
终记住,位是计算用来表示存储单元和数据长度的最小单位,无论是外存或内存都一样 ),
因此在程序中只能定义至多 16 位长的变量,因为只能定义 16 长的数值(变量),故(寄存器大
小)它也决定了计算机能表示的数值的大小,即 2 的 16 决方(1048576),这种数值至多能用来
表示的存储单位是 1048576 个,,或者说 1048576 个位,而这正是一个 16 位的数值变量所能达
到的最大值,因此这种寄存器为十六位的 CPU 只能表示至多 1024kb 个内存位,虽然可能计
算机本身不止这么多内存,虽然有时地址线不止寻址这么点的空间,但 16 位的寄存器只能
看见并寻址这么多的内存(因为地址线是 CPU 引脚线,是 CPU 的概念),寄存器的位数理论
上决定了 CPU 能"表示"的最大的内存范围或外存范围(当然,连 CPU 表示都无法表示的内存
范围那就没有意义了),而地址线决定了计算机实际能存取访问寻址到的内存范围,即 1M,
不包括 CPU 连看都无法看见的那部分,(当然如果你的计算机都没有这么多的内存也是枉说)
一个是 16 位,一个是 20 位,CPU 是怎么样产生数值用来表示地址线所能寻址到的 1M 地址
的各个单元的地址的呢???,(这里以字节来说)1M 可以分为 64k 个 64b,这样,寄存器用来存
放地址,80286 有 24 地址线,寄存器为 32 位
因为寄存器是存在于 CPU 中的,因此说是 CPU 的寻址,又为什么说 CPU 对内存的寻址呢,
为什么我们在这里口口声声地说 CPU 对内存的寻址呢,这有什么意义呢?这当然是为了计
算机能正确执行指令而准备的,这是计算机工作的本质啊(而为了执行指令,CPU 能对内存进
行寻址是首先必须要办到的,因为程序最终从外存到内存中才能被 CPU 执行,CPU 和内存都
是靠电工作的,CPU 提供执行指令的本领,而内存提供存储指令的本领,这是冯仪曼说的,成功
完全指令必须是 CPU 和内存一起工作完全的,而外存是靠磁来工作的,CPU 只能执行内存
RAM 内的指令,外存用来永久存放文件,称为持久化),程序要从外存被加载到内存中才能形
成指令
(指令在程序的 CODE 段中,EXE 文件被加载到其进程空间时------这个过程术语叫映射到其
进程空间,
它的代码段就在物理内存中了,因为只有代码段才包含指令,这部分要首先映射到物理内存
中来,程序的指令用到的数据------这通常表现为程序中的变量常量存在 data 中,数据段部
分被开辟成堆或栈的方式被映射到 EXE 的进程空间中来(分段机制),形成 EXE 的编译器不同
开辟模式不同,像 Delphi 的编译器实现的 exe 进程空间只有堆没有栈这种内存模式,堆和栈
是系统级运用内存管理器进行分配内存的动作后(是系统级的作用)形成的特殊内存块,这些
内存块被映射到 EXE 的进程空间,这有点像 EXE 的 DLL 模块的映射模式,dll 文件被映射
到其宿主 EXE 的进程空间时,不像 EXE 一样一开始就把代码段实际加载到物理内存中去了
而是在 EXE 实际调用到它时才到实际的物理内存中去(分页机制),跟 EXE 的 DATA 段一样属
于一开始就映射到 EXE 进程空间而不实际形成内存的部分,EXE,DLL 被加载到内存后,
它所占据的内存块就叫模块是静态的,而进程是一个执行体的实例是活动的,线程是一个进
程的某个执行单元,所以我们说程序被映射到到其进程空间而不直接说映射到物理内存中,
只是需要执行的代码段(注意此段非实模式彼段,后面会谈到)才被进入到物理内存,但不需
执行的那部分不需立即加载到内存(就像 DATA 和 DLL)不得不说的是,进程空间并非物理内
存,前面一再强调"程序被映射到到其进程空间而不直接说映射到物理内存中",而且更准确
地来说,它们二者是完全没有关系的,4GB 虚拟地址空间整个儿压根儿就是虚拟的(这个道
理就像你玩一个客户端为 2G 的游戏时,你启动客户端的时候已经把整个客户端的 2G 资源
都加载到 4GB 空间去了,但是只要这 2GB 中需要当前调用的那部分资源才进入内存,分段机
制开避四 GB 任务空间,分页机制把需要用到的数据动态加载到进程空间,任务空间就是进
程空间,然后通过这些资源在程序中的自动变量表示离开内存),它只是能表示 4GB 空间的
虚拟地址而已,并不是实际的物理内存,仅仅根据 32 位寄存器能表示那么多的内存来设置
的那样一个机制,这种机制成全了将进程空间隔离的好处 (所以四 GB 的说法是进程的一个
概念通常说 4GB 是进程的空间),而不像整个六四 KB 都可以,windows 的虚拟内存管理器
(保护模式下)会负责适当的时候把需要的,映射到进程空间的内存搬到物理内存中去(分页机
制),现在来解释"注意此段非实模式彼段,后面会谈到"这句话,在 FLAT 下,已经没有段
segment 了,,在 Flat 模式下就无所谡 code 段跟 data 段的了,因为原本实模式 CS,DS 意义下
所指向的段全都在一个 4GB 大的虚拟地址空间中,实模式下段的意义不存了,是段选择子
FLAT 内存模式下,CS,DS 根本就不实际用来指向段,即不实际用来指向一段内存(而是存储
一个称为段选择符的数据结构 ),FLAT 下说的代码段是指 EXE 头定义的段,是 RAW
FILE(RAW 指没有分配实际内容的内存)里定义的段而非实模式下 CPU 段寄存器指向之"段",
模拟原本的段取而代之正是 EXE 头的节的意义,程序员无须知道这些段的实际的物理内存
地址而只须知道虚拟地址,(我们知道在 32 位寄存器,在 RAW FILE 里才有节 section,有了
PE 文件的头中的这样段定义,当 EXE 被加载到内存中来,就相当一个跟内存数据段一样的
数据结构,虽然平址模式下无所谓代码段数据段,但 PE 文件的格式间接实现了它,就像
XML 文件它本身就像一个数据结构一样所以它被很多程序语言的 IDE 用来持久化,被很多
程序用来保存信息如 3D 网格信息也会用 xml 文件格式)
真正的二进制
请注意,人们说 JAVA 在语言级就实现了它的多线程,这句话与我们平常说的多线程是不一
样的,,它的多线程是针对 JVM 的多线程,而非具体针对我们日常使用的某个平台,,比
如 WIN32 的线程
另外 JAVA 也不需要指针(虽然它提供了仿指针),这是因为 JAVA 一般不用于对本地编程
(即它不面向 CPU,,也不面向运行它的某个 OS 编程),,因此指针都变得可有可无了!
为什么我们需要二进制格式呢?因为一方面这是为了存放的需要,二进制相对 ASCII 码格
式的文档(用户的软件叫文档,,但是这里只表示 ASCII 码的文档)存储占用的空间少,装载
它所花的内存镜像少,WEB 上传输的统一格式是 XML 文档,可是 XML 文档也有它的二进
剩余62页未读,继续阅读
资源评论
yinkangquan
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于spring boot的社区维修平台.zip
- 基于spring boot的网上商城购物系统.zip
- 基于spring boot的新生宿舍管理系统.zip
- 基于spring boot的校园新闻网站.zip
- 基于spring boot的学生毕业离校系统.zip
- 基于spring boot的幼儿园管理系统.zip
- Tap-Windows Adapter V9虚拟网卡驱动 tap-windows-9.24.7安装包
- 基于spring boot的疫情网课管理系统.zip
- 基于spring boot的影城管理系统.zip
- 三菱plc和组态王的3泵恒压供水 三泵变频供水三菱plc1091 带解释的梯形图程序,接线图原理图图纸,io分配,组态画面
- 基于spring boot的职称评审管理系统.zip
- 基于spring boot的准妈妈孕期交流平台.zip
- 自动折盖封箱机sw15可编辑全套技术资料100%好用.zip
- 不同构型混合动力汽车模型及控制策略,包括P2、P1+P3、P2+P3、P1+P2+P4、P1+P2.5等构型,基于规则、ECMS、DP动态规划等策略 能够验证动力性、经济性,也可根据需求修改满足不同
- 易安卓中文编程小程序源码
- 自动捆扎机sw21全套技术资料100%好用.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功