相关疑难解决方法(0)

C++结构大小:2 + 4 + 2 + 2 + 4 = 16

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

为什么sizeof();这个结构有16个字节?我正在用g ++编译.

struct bitmapfileheader {       
     unsigned short bfType;
     unsigned int bfSize;
     unsigned short bfReserved1;
     unsigned short bfReserved2;
     unsigned int bfOffBits;   
   };
Run Code Online (Sandbox Code Playgroud)

c++ sizeof structure-packing

3
推荐指数
4
解决办法
1029
查看次数

为什么struct的大小不等于其各个成员类型的大小总和?

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

我想之前必须提出类似(重复)的问题.但是我找不到它们.基本上我不知道要搜索什么.所以在这里问一下.

为什么struct的大小不等于其各个成员类型的大小总和?我正在使用visual C++编译器.

例如,假设32位机器.{=> sizeof(int)== 4; sizeof(char)== 1; sizeof(短)== 2; }

  struct {
      int k;
      char c;
  } s;
Run Code Online (Sandbox Code Playgroud)

预期的大小是4 + 1 = 5; 但sizeof(s)给出8.这里char占用4个字节而不是1.我不知道确切原因,但我的猜测是编译器这样做是为了提高效率.

struct{
 long long k;
 int i;
} s;
Run Code Online (Sandbox Code Playgroud)

预期大小为4 + 4 = 8(在32位机器上)和8 + 4 = 12(在64位机器上).但奇怪的是sizeof(s)给出16.这里int和long long每个占用8个字节.

  1. 这叫什么东西?
  2. 到底发生了什么?
  3. 为什么编译器会这样做?
  4. 有没有办法告诉编译器停止这样做?

c compiler-construction visual-c++

3
推荐指数
1
解决办法
278
查看次数

关于结构中变量的内存分配的问题(在C中)

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

#include <stdio.h>

int main(){

struct word1{
 char a;
 int b;
 char c;
};

struct word2{
 char a;
 char b;
 int c;
};

printf("%d\t%d\n", sizeof(int), sizeof(char));   //Output : 4 1
printf("%d\t%d\n", sizeof(struct word1), sizeof(struct word2)); //Output: 12 8
return 0;
}
Run Code Online (Sandbox Code Playgroud)

代码可在IDEONE获得.

为什么struct 1(word1)的大小大于struct 2(word2)的大小?

这是编译器问题吗?

c struct structure

3
推荐指数
1
解决办法
1865
查看次数

sizeof类是否保证仅包含元素的大小

给出示例类

class test
{
public:
test();
~test();
void someMethod();
void someOtherMethod();

private:
int var;
};
Run Code Online (Sandbox Code Playgroud)

sizeof(test) == sizeof(int),或者我们不能做出这样的假设?它依赖于平台/编译器吗?

编辑:

对此的动机是通过流读/写类.类确实包含一个整数,有一些方便的访问方法 - 整数的最高位字节保留用于标志,3个低位字节表示整数24位数.鉴于此,想法是编写这样的类变量的数组,并在需要时将它们读作plain int.引用可能答案的问题没有解决这个问题 - 更多的是关于使用多个元素的填充.

c++ sizeof

3
推荐指数
2
解决办法
465
查看次数

为什么size_of :: <MyStruct>()不等于其字段大小的总和?

我试图测量结构及其字段(Playground)的大小:

use std::mem;

struct MyStruct {
    foo: u8,
    bar: char,
}

println!("MyStruct: {}", mem::size_of::<MyStruct>());

let obj = MyStruct { foo: 0, bar: '0' };
println!("obj:      {}", mem::size_of_val(&obj));
println!("obj.foo:  {}", mem::size_of_val(&obj.foo));
println!("obj.bar:  {}", mem::size_of_val(&obj.bar));
Run Code Online (Sandbox Code Playgroud)

该程序打印:

MyStruct: 8
obj:      8
obj.foo:  1
obj.bar:  4
Run Code Online (Sandbox Code Playgroud)

因此结构的大小大于其字段大小的总和(这将是5).这是为什么?

struct memory-alignment memory-layout rust

3
推荐指数
1
解决办法
249
查看次数

结构成员对齐 - 使用16位和32位编译器的不同sizeof

我有一个结构用于构建控制板的消息我需要保持C167 16位Keil编译器和32位Tricore gcc编译器之间的软件兼容性.

typedef struct
{
    unsigned char new_weld_status[2];
    UINT32 new_weld_count;
    UINT16 new_weld_fail_count;
} NEW_PULSE_DATA;
Run Code Online (Sandbox Code Playgroud)

该数组new_weld_status[2]在16位编译器上占用2个字节,在32位编译器上占用4个字节.我正在考虑new_weld_status[2]用gcc编译时替换所有的联合.但是有一个我可以用于gcc的开关,使chars适合/对齐2个字节?

谢谢

c embedded gcc memory-alignment struct-member-alignment

3
推荐指数
1
解决办法
600
查看次数

当 sizeof 的大小与实际对象大小不匹配时,一切如何工作(包括运算符“-&gt;”)?

在下面的代码中,我定义了一个9 字节的结构,它与 16 字节的大小对齐。然后我从堆中动态分配 9 个字节并将其分配给标头指针。

struct header                 
{
     uint8_t chunk_id;               
     long int format;                 
};

int main()
{   
    std::cout << "sizeof(header) " << sizeof(header) << '\n';

    auto head = (header*)malloc(9);
    head->chunk_id =3;
    head->format=5;    
    std::cout << (int)head->chunk_id << " " << head->format << '\n' << sizeof(*head);

    free(head);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

sizeof(header) 16
3 5
16
Run Code Online (Sandbox Code Playgroud)

事实证明,sizeof仍然通知这个对象是 16 个字节(尽管它是 9 个)。我想它只是看结构的定义。但是,当sizeof的大小与实际对象大小不匹配时,一切如何工作(包括运算符“->”)?

c++ struct memory-alignment

3
推荐指数
1
解决办法
55
查看次数

为什么这个结构32的大小?

这是结构.

//Structure pour communiquer les paramètres de traitement à travers le MMF
struct params_traitement_mmf
{
    int brilliance;
    double contraste;
    char convolution[9];
};
Run Code Online (Sandbox Code Playgroud)

这是我显示此结构大小的代码:

    char valeur[10];
    sprintf(valeur, "%d", sizeof(params_traitement_mmf));
    MessageBoxA(NULL, valeur, "rien", MB_OK);
Run Code Online (Sandbox Code Playgroud)

MessageBox显示32.谢谢!

c++

2
推荐指数
1
解决办法
277
查看次数

纯C/C++中的二进制序列化

我想自己实现二进制序列化,而不使用Boost或任何其他第三方库.

在C++中,实现它的最简单方法是使用ofstream然后通过网络发送二进制文件.但是有没有其他流类可以用作临时缓冲区以避免将文件写入磁盘?

另外,我怎样才能在纯C中实现这一目标?

c c++ binary implementation serialization

2
推荐指数
1
解决办法
8971
查看次数

这个结构的大小

可能重复:
为什么structof sizeof不等于每个成员的sizeof之和?

我随机创建了一个Struct,它的大小让我感到惊讶,因为结果不等于我的计算结果:

int main( int argc, char ** argv ) {
    struct S
    {
        int i;
        int b;
        int c;
        long int e;
    };
    cout << sizeof (struct S) << endl; //sizeof is still an operator
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

通常,3*int + 1*long int = 3*4 + 8 = 20.

但结果是24.

这4个字节来自哪里?

c++ sizeof

2
推荐指数
1
解决办法
177
查看次数