是否存在32位变量无法正确对齐的情况
Is there cases where a 32-bit variable could not been properly-aligned
在以下链接中:http://msdn.microsoft.com/en-us/library/ms684122(VS.85).aspx,据说"对正确对齐的32位变量的简单读取和写入是原子操作"。我想知道在c++程序中,所有32位变量是否默认正确对齐。换句话说,是否存在32位变量无法正确对齐的情况。
#pragma pack(1)
struct _not_aligned {
uint8_t a;
uint32_t b; // unaligned 32-bit
};
#pragma pack()
如果不告诉编译器执行其他操作,那么它将正确对齐32位变量。
可以编写将32位变量放置在非对齐地址的代码(例如,通过创建char
数组,并将int写入数组中的奇数索引)。
您还可以使用编译器#pragmas告诉编译器不要对齐特定类型或变量。
但如果你不这样做,那么你的变量就会正确对齐。
相关文章:
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 如何创建一个QTableWidgetItem,用长文本右对齐,左边有省略号
- 我可以检测和更改 gcc/g++ 中结构的当前数据对齐设置吗?
- 64位机器上的C++内存对齐
- 为什么我可以将变量存储在不是其最小对齐方式的倍数的地址?
- 使 std::vector 分配对齐内存的现代方法
- C++ cout 将双精度对齐到精度 2 并正确对齐
- 在 64 位边界上对齐C++结构数组?
- 使用 g++7 构建的代码在访问未对齐的内存时崩溃
- 在 capnp FlatArrayMessageReader 的对齐内存缓冲区中接收 zmq 消息
- 是否值得对齐变量?
- 初始化派生结构的基部分/意外打包派生结构字段以对齐基结构的间隙
- 投射空指针以检查内存对齐情况
- C++ 编译器正在更改我的结构的对齐方式.我怎样才能防止这种情况
- 在以下情况下,是否可以分配未对齐的对象?
- 是否存在32位变量无法正确对齐的情况
- 套接字:在没有memcpy的情况下,使用recvfrom将UDP数据获取到字对齐的缓冲区
- 如何在不使用两个标签的情况下对齐左侧的一些文本和右侧的一些文本
- 在不知道字符串宽度的情况下左右对齐
- 如何在不分配内存的情况下将openv映射到具有对齐支持的特征