C++内存管理

内存管理的形式

  • 栈: 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的,当方法和语句块一结束,空间马上释放

阅读全文

NASA的C语言编程准则

美国国家航空航天局(NASA)开发人员的工作是编程界最具挑战性的工作之一。 他们编写代码并开发关键任务应用程序,安全是他们主要关注的重点。
在这种情况下,制定严谨的编码准则并遵循,对于他们来说十分重要。这些规则涵盖了软件开发的各个方面,如应该如何编写软件,应该使用哪些语言特性等等。

阅读全文

Linux写时拷贝

COW技术初窥

Linux写时拷贝技术(copy-on-write):COW
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。

阅读全文

C++类特性

访问限定符说明

  1. public修饰的成员在类外可以直接被访问
  2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的)

阅读全文

C++11新特性

auto关键字

C语言中其实就有auto关键字,修饰可变化的量,但是由于平时我们直接使用int a = 10;也是声明变量,编译器已经自动帮我们加上了auto关键字,是C语言中应用最广泛的一种类型,也就是说,省去类型说明符auto的都是自动变量!
随着时代进步,Java10中有一个新特性,就是使用var来定义变量,当然前提是类型可推导,语言总是在演化,C++11也是支持了这个新特性,不过在C++11中是auto关键字:使用auto的时候,编译器根据上下文情况,确定auto变量的真正类型!
接下来演示一下auto的使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main() {
auto a = 10;
auto b = 20;

list<string> s;

list<string>::iterator be = s.begin();
list<string>::iterator en = s.end();

auto be2 = s.begin(); //很显然使用auto可以减少很多不必要的代码
auto en2 = s.end();

return 0;
}

阅读全文

Linux下打包静/动态库

静态库和动态库概念

静态库

在Linux下是.a的后缀名,在windows下是.lib的后缀名,程序在编译链接的时候吧库代码链接到可执行文件中,运行时不再需要静态库

阅读全文

软硬链接与Linux文件系统

想要理解硬链接和软链接必须要了解一下什么是Linux的文件系统

文件分类

阅读全文

工厂设计模式

六大设计原则

既然说到设计模式那就顺便回顾一下六大设计原则,六大设计原则是心法,二十三种设计模式是内功,下面只是简明的叙述了一下,后面还会有更详细的说明!
一 、 类单一职责原则:Single Responsibility Principle (SRP)
一个类只有一个引起这个类变化的原因。即一个类只完成一个功能,如果做不到一个类只完成一个功能,最少要保证一个方法只完成一个功能。

阅读全文

文件描述符与系统IO

一、fopen函数

1
2
#include <stdio.h>
FILE *fopen(const char *path, const char *mode);

阅读全文

函数重载原理

函数重载

方法重载 (overload)
C++允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading),借助重载,一个函数名可以有多种用途。

阅读全文