【请教】c++ 变量内存地址对齐的问题
代码如下:
这是输出的各字段的内存地址:
0x22fef0 (id)
0x22fef4 (num)
0x22fef8 (price)
0x22fefc (str)
0x22ff10 (total)
st结构中的str占用15字节空间,内存按照4字节对齐=>total的地址为0x22fefc+16=0x22ff08,但输出的却是0x22ff10,多了4字节,这是怎么回事?
还有,内存对齐和系统相关,因此怎样才能根据st的首地址和偏移量求出total的地址呢?(这里不直接用.运算符,即不使用&st.total,如何按照st的地址求total的地址)
先谢谢了!
struct st{
int id;
unsigned int num;
float price;
char str[15];
double total;
}
这是输出的各字段的内存地址:
0x22fef0 (id)
0x22fef4 (num)
0x22fef8 (price)
0x22fefc (str)
0x22ff10 (total)
st结构中的str占用15字节空间,内存按照4字节对齐=>total的地址为0x22fefc+16=0x22ff08,但输出的却是0x22ff10,多了4字节,这是怎么回事?
还有,内存对齐和系统相关,因此怎样才能根据st的首地址和偏移量求出total的地址呢?(这里不直接用.运算符,即不使用&st.total,如何按照st的地址求total的地址)
先谢谢了!
...全文
相关推荐
C++内存分配的对齐规则
概念:内存对齐是指在存储器中对数据的排列方式,使得每种类型的变量都从特定的内存地址开始访问,以提高存取效率。对齐的作用是使得硬件平台上的存储空间处理变得更加高效。
深入剖析C++中的struct结构体字节对齐
在实际开发中,应该尽量让编译器自动处理字节对齐问题,除非有特殊需求。
C++内存对齐方案.docx
在C/C++中,内存对齐的概念尤为重要。由于不同的硬件平台对内存的访问方式有所差异,一些平台要求特定类型的数据必须从特定的内存地址开始读取。
c++中关于结构体长度的计算问题.pdf
"C++结构体长度计算问题"一、结构体长度计算的重要性在C++编程中,结构体的长度计算是一个非常重要的问题。
C_C++指针经典.pdf
《C/C++指针经典》深入探讨了C和C++编程中的核心概念——指针。指针是C和C++语言中的重要特性,它允许程序员直接操作内存地址,实现高效的数据处理和复杂的数据结构。以下是关于指针的详细解析:1.


