• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

C语言结构体内存分配问题

Angel_YY 2019-08-27 浏览量:1247

在使用GCC编译Arm Cortex M单片机程序时,代码中使用了结构体,如下所示:

struct MyData
{
	float a;
	float b;
 	float c;
	float d;
	float e;
	float f;

	int g;
	int h;
	int i;
	int j;

	char k;
	char l;
	char m;
	char n;
	char o;
	char p;
	// 下面两个无用,只是站位,保证四字节对齐
	char q;
	char r;
}
定义结构体变量的时候,为了使系统分配的内存保证连续,做了字节对齐,sizeof一下结构体变量,返回大小为48字节;

如果注释掉 char q和char r(这两个无用)sizeof一下结构体变量还是48个字节;

那么是不是可以认为结构体cha 类型的放在最后的情况下(保证前面是四字节对齐的),不用考虑最后的char类型变量对齐到四个字节?

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 你的试验证明了Cortex-M​的GCC自动完成了自己对其。

    其实是GCC的一个配置,有些编译链默认开启了自己对齐,有些需要手动配置而已。基本现代编译器都带自动对其功能

    • 发布于 2019-08-28
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:2
  • 字节对齐一般是编译器会自动处理的,不同的编译器或者编译选项效果是不一样的。

    所以你的理解对有自动对齐设置时可以这么认为,否则就不行。

    • 发布于2019-08-28
    • 举报
    • 评论 1
    • 1
    • 0
53e0c849570b55f8 回复了 xdsnet :点赞点赞点赞 回复

  • 应该是编译器做的对其处理,建议还是自几加上,确保在其他IDE下也能做到对齐
    • 发布于2019-09-11
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

C语言结构体内存分配问题