如果我进行地址,则可以保证静态变量

Are static variables guaranteed to be in order if I take its address?

本文关键字:静态 变量 行地址 如果      更新时间:2023-10-16

我想知道,如果我参加一个完全静态的类的地址,我是否可以保证它的成员可以按正确的顺序对齐?我猜这也适用于全局范围中定义的一组变量。

struct Buffer1
{
    static float val1;
    static float val2;
};
void readBuffer(void* buffer){ /*Do something*/}
int main()
{
// Sending the buffer
    readBuffer(&Buffer1);               // Type name is not allowed
    readBuffer(&Buffer1::val1);         // Does work, wondering if data will be correct
    return 0;
}

另外,是否有一种方法可以采取一组静态变量或全局变量的大小?喜欢:

// Getting the size of the buffer
    size_t sizeOfBuffer = sizeof(Buffer1);  // Wrong size, doesn't measure static members
    sizeOfBuffer = sizeof(Buffer1::val1) + sizeof(Buffer1::val2);   // Does work but doesn't account for data padding/alignment, and is also tedious to change

我知道,在这种情况下,可以实例化班级要好得多,但我对这两个问题感到好奇。谢谢。

no,C 标准未在静态范围中指定内存中对象的顺序。

C 标准也不能保证类成员的相对顺序。