学习笔记 - 结构体与字节对齐控制指针结构(一)

前言
看了lwip的源代码,对结构体类型的指针操作一段内存的指定位置有了一些新的理解,如果要操作一段内存中,如0X00~0X03处这四个字节大小的内存,那么我们可以自己定制一个四个字节大小的结构体来随意操作(前提是要取消掉字节的默认对其),gcc在编译第二阶段(头文件和宏展开后的下一阶段,转换成汇编语言)会处理c语言中的字节对齐命令(#pragma pack(n) )

字节对齐命令的处理位置

字节对齐命令
#pragma pack(n) //以下的数据采用n字节对齐
#pragma pack() // 与上面的命令连用,恢复缺省字节对齐值
代码部分

// 1_main.c // 采用1字节对齐方式
#pragma pack(1)
struct test{
uint8_t u8 ;
uint16_t u16 ;
};
#pragma pack()
struct test test_1 ;
// 4_main.c // 采用4字节对齐方式(大多数编译器的缺省值)
#pragma pack(4)
struct test{
uint8_t u8;
uint16_t u16;
};
#pragma pack()
struct test test_4 ;

编译到第二阶段时的不同之处
在这里插入图片描述
编译到第三阶段的不同之处
在这里插入图片描述
编译到第四阶段的不同之处(这里要留意)
在这里插入图片描述
程序段头表完全一样!!!这里就不放了
size命令查看的信息也完全一样!!!这里也不放了
不知道为什么,放几个图片就写的不正常了,接下来的部分放在另一篇里面吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值