x86和x64中,从汇编的角度看,
对任何内存地址中的1byte的读永远是原子的.也就是说对一个char的读取永远是原子的
对内存地址对齐2byte的int16类型的读取是原子的,对4byte对齐的int32类型读取是原子的,
从从奔腾开始,对8byte对齐地址的int64读取是原子的.
在x86下,malloc出来的内存均为8byte对齐的,在x64下则是16byte对齐,栈上也是按照类型的对齐方式创建实例的,因此理论上说能
保证1-8byte对齐的数据读写是原子性的,但最好不要这样,因为C和C++均不保证一个变量的读取必须用一条汇编指令完成,
2是有时候我们会把一个未对齐的内存地址强制转型成其他类型(这样做很危险但很多人在这样做),例如:
char data[8];
int* k=(int*)&char[1];
*k=1;//此处无法保证*k按照4byte对齐
因此,最好认为读写内存均不是原子的.如果有这种需求,最好使用atomic库.