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庫.