Persuez's Blog

Thinking will not overcome fear but action will.

Nullptr、auto 和 uniform initialization

本篇介绍一些 C++ 11 的小知识,其中包括: nullptr关键字 auto关键字 uniform initialization 先介绍个小知识,C++ 11后的编译器可以识别:vector <list<int>>,不一定要写成vector <list<int> >。 nullptr 关键字 C++ 11 为了区分 ...

Arp 协议

如果一台主机要将一个帧发往另一台主机,仅知道对方的 IP 地址是不够的,还需要知道主机在网络中的有效硬件地址。那这时就需要一种技术(或某种协议)可以由已知的 IP 地址获得主机所在网络的有效硬件地址,我们通常使用 ARP 协议由 IP 地址获得相关硬件地址。注意以上所说的 IP 地址是指 IPv4,IPv6 在以太网中用邻居发现协议,它被并入了 ICMPv6 协议。 ARP 提供了网...

初识内存管理

每个程序员都梦想拥有这样的存储器:它是私有的、容量无限大的、速度无限快的,并且是永久性的(即断电时不会丢失数据。–《现代操作系统》 但是梦想是美好的,现实就是挺现实的。除此之外,经过多年的探索,人们提出了分层存储器体系的概念,在这个体系中,计算机有若干兆(MB)快速、昂贵且易失性的高速缓存,数千兆(GB)速度与价格适中且同样易失性的内存,以及几兆兆(TB)低速、廉价、非易失性的磁盘...

C语言restrict关键字

restrict关键字 今天看APUE,发现了fgets的原型是char *fgets(char *restrict buf, int n, FILE *restrict fp);,然后一脸懵逼,restrict是什么鬼,于是跑去查了一下,原来和pointer aliasing有关,和编译器优化有关。 pointer aliasing就是两个(多个)指针指向同一块内存区域。因为这个问...

Git简单实用命令

创建仓库 git init:初始化一个目录,使其成为git的根工作区。生成的.git目录被称为版本库(Repository)。 git add 文件和git commit -m "提交的注释信息"。(这个其实和创建仓库没啥关系,但写就写了吧) 为了方便本地管理仓库(不用每次连接都输密码)和安全,而且速度比https更快,我们用ssh协议进行连接: 如果在...

对象初始化

对象初始化 C++中对象初始化是依靠constructor(常译为:构造函数)。这个特殊的函数的函数名与类名要相同,并且没有返回值。一般放在public域中,因为一般情况需要在类的外面声明类的变量并进行初始化。如: class Stock { public: Stock(int a) // constructor { _a = a; } private: int _...

Namespace基本知识

Namespace C++中namespace简单来说就是用来控制标志符(如变量,函数,类等)的名字冲突的。 简单术语 declarative region: 指标志符声明的区域。具体见图一。 potential scope: 指从该标志符的声明点到其declarative region的终点。也就是一个标志符的最大可能作用域。具体见图二。 scope: 指标志符的可见区域...

Gcc和make的基本知识

注:以下实验环境为Ubuntu 18.0404LTS, gcc 7.3.0 GCC 编译单个源文件main.c 生成目标文件:gcc -c main.c 生成可执行文件: gcc -o main main.c,然后通过./main执行 链接多个目标文件并生成可执行文件:gcc -o test main.o test.o 链接库...

可重定位对象文件

对象文件分为三种 可重定位对象文件(relocatable object file):以某种形式包含二进制代码和数据,并且可以和其他的可重定位对象文件在编译时一起组合编译成另外一种对象文件-可执行对象文件。 可执行对象文件(executable object file):以某种形式包含二进制代码和数据,特点是可以直接被复制到内存中并执行。 共享对象文件(shared obje...

C语言标准输入输出缓冲区

注: 以下实验环境为Ubuntu 18.04LTS(只有64bit),gcc (Ubuntu 7.3.0-16ubuntu3) 7.3.0 缓冲区例子 我们先来说说什么是C语言中的缓冲,直接来看一个例子体会一下就知道了。我们以printf函数和stderr为例,先说明stdout(对应printf)是遇到换行符或缓冲区满之后或程序结束后才输出缓冲,stderr一般是无缓冲的: /* ** ...