测试8字节对齐

本文通过实际测试探讨32位系统中8字节对齐、int类型、指针和位操作的关系。作者发现,32位系统中int占4个字节,指针同样为4个字节,取反操作后的结果为16进制数。在malloc分配的地址中,末尾字节通常为0,导致特定条件下的比较结果不变。然而,对于某些细节,作者感到困惑并希望进一步理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对十六进制和按位操作,总是糊涂,所以实际测试下:

我的理解,不一定全部正确:

32位的系统上,(都以32位系统为例)

一个int型是4个字节,所以0x3是 0x0003,四个字节,其中3代表一个字节(8个二进制位)00000011,0就是00000000了。

一个指针也是4个字节,这个程序里头打印 的很多都是指针类型的值:

比如 [5d2f70]  ,是4个字节的十六进制数。

对0x03取反,得到的也是一个十六进制的数: [fffffffc]

malloc出来的地址,多次运行,最后一个字节,都是0,所以每次与,都还是0,buf与prealbuf一直都是相等的。

不太懂了 。。。。。


#include<stdio.h>
#include<stdlib.h>

typedef struct _RingBuffer{
        unsigned int *prealbuf;
        unsigned char *buf;
        unsigned int size;
        unsigned int capacity;
}RingBuffer;

void testAlign8(RingBuffer **prb,int capacity)
{
     RingBuffer *rb;
     rb=malloc(sizeof(RingBuffer));
     if(rb==NULL)
     {
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等风来不如迎风去

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值