Skip to content

Commit

Permalink
fix typo
Browse files Browse the repository at this point in the history
Change-Id: I5aefa17a9a6f7b8ac37847198951aca45a3e6f50
  • Loading branch information
zhangyuanlong committed Oct 9, 2020
1 parent f4166fe commit 3e82ae0
Show file tree
Hide file tree
Showing 6 changed files with 87 additions and 93 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ if ((uFlags & LOG_LEECHER) && !thePrefs.GetAntiLeecherLog())
方法:

```
GreenValue = 0xCD1298 & 0x001100,
GreenValue = 0xCD1298 & 0x001200,
```

这样就可以做到了。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@

需要注意的是本文不细分 **C****C++** 的区别,通常情况下,C++ 可以看成是 C 的一个超集,在古典时期,可以认为 C++ 就是 **C with classes**。虽然如今的 C++ 从功能层面上来看,离 C 越来越远了;但是从语法层面来上来看,大多数 C++ 语法还是与 C 基本一致的——所谓 C++ 的面向对象特性,如果细究 C++ 类方法的具体语法还是 C 的过程式语法。当然,面向对象是一种思想,语言本身对其支持的程度固然重要,能否熟练使用更要看开发者的水平。

C 语言目前主要用于像操作系统一类偏底层的应用开发,包括像 Windows/Linux 这样的大型商业操作系统,以及嵌入式操作系统、嵌入式设备上的应用。还有一些开源的软件,也会选择 C 开发,这些系统主要优先考虑程序执行效率和生成的可执行文件的体积(C 代码生成的可执行文件体积相对更小),当然还有一些是历史技术选型问题,这类软件像 Redis、libevent、Nginx,目前像国内的电信服务商所使用的电话呼叫系统,一般也是基于一款叫 **FreeSWITCH** 的开源 C 程序做的二次开发(项目地址:https://freeswitch.com/)。
C 语言目前主要用于像操作系统一类偏底层的应用开发,包括像 Windows/Linux 这样的大型商业操作系统,以及嵌入式操作系统、嵌入式设备上的应用。还有一些开源的软件,也会选择 C 开发,这些系统主要优先考虑程序执行效率和生成的可执行文件的体积(C 代码生成的可执行文件体积相对更小),当然还有一些是历史技术选型问题,这类软件像 Redis、libevent、Nginx,目前像国内的电信服务商所使用的电话呼叫系统,一般也是基于一款叫 **FreeSWITCH** 的开源 C 程序做的二次开发(项目地址:https://freeswitch.com/ )。

C++ 面向对象的语法与 C 相比较起来,在将高级语言翻译成机器二进制码的时候,C++ 编译器在背后偷偷地做了大量工作,生成了大量的额外机器码,而这种机器码相对于 C 来说不是必须的。例如,对于一个 C++ 类的实例方法,编译器在生成这个方法的机器码时,会将函数的第一个参数设置成对象的 this 指针地址,以此来实现对象与函数的绑定。正因为如此,许多开发者会优化和调整编译器生成的汇编代码。

我们再来说说 C++。C++ 的应用领域目前有三大类,第一类就是我们目前见到的各种桌面应用软件,尤其 Windows 桌面软件,如 QQ、安全类杀毒类软件(如金山的安全卫士,已开源,其代码地址:http://code.ijinshan.com/source/source.html)、各种浏览器等;另外就是一些基础软件和高级语言的运行时环境,如大型数据库软件、Java 虚拟机、C# 的 CLR、Python 编译器和运行时环境等;第三类就是一些业务型应用软件的后台,像游戏的服务器后台,如魔兽世界的服务器(代码地址:https://github.com/azerothcore/azerothcore-wotlk)和一些企业内部的应用系统。笔者曾在某交易所从事后台开发,其交易系统和行情系统就是基于 C++ 开发的。
我们再来说说 C++。C++ 的应用领域目前有三大类,第一类就是我们目前见到的各种桌面应用软件,尤其 Windows 桌面软件,如 QQ、安全类杀毒类软件(如金山的安全卫士,已开源,其代码地址:http://code.ijinshan.com/source/source.html )、各种浏览器等;另外就是一些基础软件和高级语言的运行时环境,如大型数据库软件、Java 虚拟机、C# 的 CLR、Python 编译器和运行时环境等;第三类就是一些业务型应用软件的后台,像游戏的服务器后台,如魔兽世界的服务器(代码地址:https://github.com/azerothcore/azerothcore-wotlk )和一些企业内部的应用系统。笔者曾在某交易所从事后台开发,其交易系统和行情系统就是基于 C++ 开发的。

### C++ 与操作系统平台

Expand Down
Binary file added articles/imgs/errorsys1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added articles/imgs/log1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ LOG_ERROR("Recv data error, errorNO=%d.", ::WSAGetLastError());

从上面的日志输出来看,这种同步的日志输出方式,也存在时间顺序不正确的问题(时间戳大的日志比时间戳小的日志靠前)。这是由于多线程同时写日志到同一个文件时,产生日志的时间和实际写入磁盘的时间不是一个原子操作。下图解释了该现象出现的根源:

![img](data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQImWNgYGBgAAAABQABh6FO1AAAAABJRU5ErkJggg==)
![](../imgs/log1.png)

多线程写同一个日志文件出现先产生的日志后写入到文件中的现象

Expand Down
Loading

0 comments on commit 3e82ae0

Please sign in to comment.