c++细节

1.对象的分配可以有三种方式:在堆栈上(作为自动对象),在固定地址(静态对象),在自由存储区(在堆或者说在动态存储区里)。具体的区别从网上找的话不知道谁说的对谁说的错,还是试图从经典的书上找吧。

volatile关键字作用:当volatile int i的时候,每次用到i的时候都从i所在的内存位置中读取,提供对特殊数据的稳定访问,原文链接:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777432.html

GCC提供的原子操作:__sync_*系列的built-in函数,http://www.cnblogs.com/FrankTan/archive/2010/12/11/1903377.html

__typeof__(var) 是gcc对C语言的一个扩展保留字,用于声明变量类型,var可以是数据类型(int, char*..),也可以是变量表达式。

__builtin_expect((x),1) 表示 x 的值为真的可能性更大; 
__builtin_expect((x),0) 表示 x 的值为假的可能性更大。 

__builtin_expect(x,y)是用来做分支预测的,可以提高效率。

在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

Linux多线程编程详解----条件变量pthread_cond_t:http://blog.csdn.net/mashang123456789/article/details/9792677

Linux使用线程:http://blog.csdn.net/jiajun2001/article/details/12624923

C++提供了关键字explicit,可以阻止不应该允许的经过转换构造函数进行的隐式转换的发生。声明为explicit的构造函数不能在隐式转换中使用。

__thread用法:http://blog.csdn.net/crazyhacking/article/details/19930389

无意中看到的:总结一下就是,输出到调用printf输出到终端时,输出一行输出缓冲区就会被冲洗。但是输出到文件时,变成了全缓冲,输出一行但是缓冲区并没有被冲洗。此程序是父进程先运行,子进程得到了父进程的数据空间副本,所以父进程调用的printf产生的数据缓冲也复制到了子进程的数据空间,所以调用printf函数就把父进程的数据也打印出来了。(全缓冲和行缓冲的区别)。

fcntl函数只需要知道打开文件的描述符就能对该描述符进行设置。

setsockopt和getsockopt函数可以设定或者获得socket的一些属性,具体等待后期继续了解。

epoll不支持普通文件描述符。

shared_ptr的线程安全问题:

• 一个 shared_ptr 对象实体可被多个线程同时读取;
• 两个 shared_ptr 对象实体可以被两个线程同时写入,“析构”算写操作;
• 如果要从多个线程读写同一个 shared_ptr 对象,那么需要加锁。

正常情况下基类需要是虚析构函数的原因:http://blog.csdn.net/starlee/article/details/619827

const关键词在不同位置的区别:

  在一个变量声明的不同位置:http://blog.csdn.net/youoran/article/details/7800603

  修饰成员函数时:http://blog.csdn.net/zcf1002797280/article/details/7816977

c++乱序执行的问题:http://blog.csdn.net/world_hello_100/article/details/50131497

原文地址:https://www.cnblogs.com/lthb/p/6368663.html