请选择 进入手机版 | 继续访问电脑版

C++编程

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: ID紫麒麟

紫麒麟笔记_对一些基础东西的理解

[复制链接]

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2017-8-29 19:02:14 | 显示全部楼层
经过各种测试发现在VS里面,测试unsigned long还是4个字节。
也就是说再VS编译的64位程序里面DWORD和unsigned long以及long都是4字节的。
回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2017-9-6 16:50:19 | 显示全部楼层
explicit这么个关键字,最近看代码看到的。
以前都是直接将一些会造成隐式调用的构造函数放到private里面
今天看到这么个关键字,才发现其实是可以用这个关键字似乎能达到一部分的作用,现在没时间细研究,等有空了再去看看这个东西。
回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2017-9-7 17:07:10 | 显示全部楼层
本帖最后由 ID紫麒麟 于 2017-9-15 13:20 编辑

。。。。
回复

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2017-9-30 17:41:18 | 显示全部楼层
因为是放假前最后一天,搞一些东西会有断层,所以就看了一些代码。看到这么个宏:

#define CHARTOVALUE(c)  (c <= '9' ? c - '0' : (c <= 'F' ? c - 'A' + 0x0A : c - 'a' + 0X0A))

然后下面是另外一种写法:

    if (c >= '0' && c <= '9') {
        h += c - '0';
    } else if (c >= 'A' && c <= 'F') {
        h += 10 + c - 'A';
    } else if (c >= 'a' && c <= 'f') {
        h += 10 + c - 'a';
    } else {
        return 0;
    }
我个人推荐后面那个多行的,因为前面的那个似乎没有检测c是不是0123456789ABCDEFabcdef这21个字符里面的。
回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2017-11-20 17:43:28 | 显示全部楼层
最近从另外一个角度熟悉了一个东西,最初完全不懂里面的逻辑,看的东倒西歪的,然后突然想到一个问题,如果让你去实现这个功能,会是什么模样,然后反过来去看那些什么特性,什么接口之类的东西。。。。。

哈哈,这就是所谓的上帝视角去看问题了。
回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2017-12-7 16:35:08 | 显示全部楼层
PulseEvent
SetEvent
回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2018-1-3 10:51:19 | 显示全部楼层
本帖最后由 ID紫麒麟 于 2018-1-3 10:56 编辑

今天写一个并不基础的东西吧,起因是我按照正常的写了个WaitForSingleObject然后多线程一类的东西给一个人,他告诉我那个线程直接搞一个bool就行了。
我也在几个群里问过这件事,也有不少人参与讨论。有些老手也会说这样搞不行。
后来我又帮着另外一个人搞同样类型的东西,结果我就用了bool,那个人就发火儿了。说这样不行,你用new跟delete就必然出问题。
现在我测试了一下,大概知道哪里能用bool,哪里必须用WaitForSingleObject了。
区别:
1、应用场景不同。
2、线程中是否调用了class里面的成员变量。

怪不得网络上都是WaitForSingleObject的写法。

等有空的时候,我再继续说明详细区别吧。


回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2018-1-19 18:26:38 | 显示全部楼层
好久没写东西了,听着一首《林中鸟》写点儿东西吧
忘记在哪个群里看到的,或许是一个搞java的人说的吧,说union没啥用。。。。
唉。。。我只能说骚年修炼的不够呀。。。
很有用处,而且用处挺大的。
大小端一类的就不说了,在协议解析方面作用是非常大的。
例子嘛,我随便写一个吧:
struct _tag_Protocol {        union {
            ProtocolHeader head;
            char data[1024];
        };
        uint16_t crc16;
}Protocol;
有啥作用就自己领会吧
领会不到就算了,以后如果做协议解析方面的东西再看这个应该就明白了。
回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2018-1-26 16:41:09 | 显示全部楼层
今天来点儿不务正业的东西:《为什么8086CPU的地址总线是20根》真正的不务正业,跟软件无关的东西

8086处理器引入了一个重要概念--段。8086处理器的寻址目标是1M大的内存空间,于是它的地址总线扩展到了20位。但是,一个问题摆在了Intel设计人员面前,虽然地址总线宽度是20位的,但是CPU中“算术逻辑运算单元(ALU)”的宽度,即数据总线却只有16位,也就是可直接加以运算的指针长度是16位的。如何填补这个空隙呢?可能的解决方案有多种,例如,可以像一些8位CPU中那样,增设一些20位的指令专用于地址运算和操作,但是那样又会造成CPU内存结构的不均匀。又例如,当时的PDP-11小型机也是16位的,但是其内存管理单元(MMU)可以将16位的地址映射到24位的地址空间。受此启发,Intel设计了一种在当时看来不失为巧妙的方法,即分段的方法。

为了支持分段,Intel在8086 CPU中设置了四个段寄存器:CS、DS、SS和ES,分别用于可执行代码段、数据段、堆栈段及其他段。每个段寄存器都是16位的,对应于地址总线中的高16位。每条“访内”指令中的内部地址也都是16位的,但是在送上地址总线之前,CPU内部自动地把它与某个段寄存器中的内容相加。因为段寄存器中的内容对应于20位地址总线中的高16位(就是把段寄存器左移4位),所以相加时实际上是内存总线中的高12位与段寄存器中的16位相加,而低4位保留不变,这样就形成一个20位的实际地址,也就实现了从16位内存地址到20位实际地址的转换,或者叫“映射”。段式内存管理带来了显而易见的优势,程序的地址不再需要硬编码了,调试错误也更容易定位了,更可贵的是支持更大的内存地址。程序员开始获得了自由。

技术的发展不会就此止步。intel的80286处理器于1982年问世了,它的地址总线位数增加到了24位,因此可以访问到16M的内存空间。更重要的是从此开始引进了一个全新理念--保护模式。这种模式下内存段的访问受到了限制。访问内存时不能直接从段寄存器中获得段的起始地址了,而需要经过额外转换和检查。为了和过去兼容,80286内存寻址可以有两种方式,一种是先进的保护模式,另一种是老式的8086方式,被成为实模式。系统启动时处理器处于实模式,只能访问1M空间,经过处理可进入保护模式,访问空间扩大到16M,但是要想从保护模式返回到实模式,你只有重新启动机器。还有一个致命的缺陷是80286虽然扩大了访问空间,但是每个段的大小还是64k,程序规模仍受到限制。因此这个先天低能儿注定寿命不会很久。很快它就被天资卓越的兄弟--80386代替了。

80386是一个32位的CPU,也就是它的ALU数据总线是32位的,同时它的地址总线与数据总线宽度一致,也是32位,因此,其寻址能力达到4GB。对于内存来说,似乎是足够了。从理论上说,当数据总线与地址总线宽度一致时,其CPU结构应该简洁明了。但是,80386无法做到这一点。作为X86产品系列的一员,80386必须维持那些段寄存器的存在,还必须支持实模式,同时又要能支持保护模式,这给Intel的设计人员带来很大的挑战。Intel选择了在段寄存器的基础上构筑保护模式,并且保留段寄存器16位。在保护模式下,它的段范围不再受限于64K,可以达到4G。这一下真正解放了软件工程师,他们不必再费尽心思去压缩程序规模,软件功能也因此迅速提升。

从8086的16位到80386的32位处理器,这看起来是处理器位数的变化,但实质上是处理器体系结构的变化,从寻址方式上说,就是从“实模式”到“保护模式”的变化。从80386以后,Intel的CPU经历了80486、Pentium、PentiumII、PentiumIII等型号,虽然它们在速度上提高了好几个数量级,功能上也有不少改进,但基本上属于同一种系统结构的改进与加强,而无本质的变化,所以我们把80386以后的处理器统称为IA32(32 Bit Intel Architecture)。
回复 支持 反对

使用道具 举报

18

主题

225

帖子

971

积分

高软

Rank: 4

积分
971
 楼主| 发表于 2018-2-5 11:39:08 | 显示全部楼层
别看我写了那么多的基础知识什么的,其实都是表象,归根结底的东西没有写。而且好多好多东西都没有点透,我特别痛恨网络上那些把简单的东西写的又臭又长的所谓的教程。
只是我好多时候也没有舍得把归根结底的东西搞到网上,确实是有些舍不得呀。或许什么时候舍得了就写出来吧。

快要过年了呀,又是每年一次的回家大军,以及各种大爷大妈。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|C++编程  

GMT+8, 2022-6-28 05:12 , Processed in 0.138606 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表