结构字节大小计算
Struct Byte size calulation
我无法弄清楚结构大小的计算方式。
为什么这些结构中有 2 个是 8 字节(我原以为一个是 6 字节)
如果以4字节块赋值,为什么第一个结构体只有2字节?
2 : DllStructGetSize(DllStructCreate("word")
4 : DllStructGetSize(DllStructCreate("float"))
8 : DllStructGetSize(DllStructCreate("float;word"))
8 : DllStructGetSize(DllStructCreate("float;word;word"))
12 : DllStructGetSize(DllStructCreate("float;word;word;float"))
AutoIt 以使其与 C dll 兼容的方式分配结构。我不知道它到底是什么的确切细节,但有些东西(例如对齐和填充)会导致您看到的结果。例如,运行 这个 C++ 代码,你得到的结果是 8:
#include <iostream>
struct foo {
float a;
char b;
};
int main(int argc, char const *argv[]) {
std::cout << sizeof(foo) << std::endl;
return 0;
}
如果您想了解这一点,最好的办法是查看 C 结构和内存打包。我有一段时间没研究了,但试试 this.
我无法弄清楚结构大小的计算方式。
为什么这些结构中有 2 个是 8 字节(我原以为一个是 6 字节)
如果以4字节块赋值,为什么第一个结构体只有2字节?
2 : DllStructGetSize(DllStructCreate("word")
4 : DllStructGetSize(DllStructCreate("float"))
8 : DllStructGetSize(DllStructCreate("float;word"))
8 : DllStructGetSize(DllStructCreate("float;word;word"))
12 : DllStructGetSize(DllStructCreate("float;word;word;float"))
AutoIt 以使其与 C dll 兼容的方式分配结构。我不知道它到底是什么的确切细节,但有些东西(例如对齐和填充)会导致您看到的结果。例如,运行 这个 C++ 代码,你得到的结果是 8:
#include <iostream>
struct foo {
float a;
char b;
};
int main(int argc, char const *argv[]) {
std::cout << sizeof(foo) << std::endl;
return 0;
}
如果您想了解这一点,最好的办法是查看 C 结构和内存打包。我有一段时间没研究了,但试试 this.