【发布时间】:2015-11-05 07:08:17
【问题描述】:
很抱歉这个愚蠢的问题,但我怎么知道其中有几个成员的结构的实际大小。
例如这是我的结构:
typedef struct mastruct mastruct;
struct mastruct{
int val;
char *chaine;
float decimal;
}__attribute__((packed));
和矫揉造作:
mastruct hello =
{
23,
"Hello world!",
3.141592654
};
printf 把这个返回给我:
printf("int : %d, char* : %d, float : %d\n", sizeof(int), sizeof(char*), sizeof(float));
printf("struct size : %d\n", sizeof(hello));
int : 4, char* : 8, float : 4
struct size : 16
这是正常的,因为 int + char* + float = 16 字节,但这不是我想要的。我想知道内存中结构的完整大小。
例如,如果我在写“Hello world!!!!!!!!!!!!!!!!!!!!!”而不是“你好世界!”这会修改足迹内存,我需要知道这一点。
在这个例子中,如果我打印结构的大小,我仍然得到 16 个字节:
mastruct hello =
{
23,
"Hello world! Hellooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo",
3.141592654
};
【问题讨论】:
-
那是
sizeof hello + strlen(hello.chaine) + 1。 (但是对于包含指针的任意结构,没有办法概括这一点。) -
有一些答案here,包括我以外的答案,详细讨论了这个问题。
-
“具有多个成员的结构的实际大小”是
sizeof hello。注意到更多,没有更少。