填充字节实现自然对齐

[复制链接]
537|3
逢dududu必shu 发表于 2025-9-29 21:22 | 显示全部楼层 |阅读模式
通过添加填充字节确保缓冲区起始地址满足对齐要求:
c
运行
// 动态计算填充字节数
#define ALIGNMENT 4  // 32位对齐要求
uint8_t padding = 0;
uint8_t *ws2812_buffer;

// 分配缓冲区时计算所需填充
void init_ws2812_buffer() {
    // 先分配足够的内存(原始大小 + 可能的填充)
    uint8_t *temp = malloc(WS2812_BUF_SIZE + ALIGNMENT);

    // 计算需要填充的字节数
    padding = (ALIGNMENT - ((uint32_t)temp % ALIGNMENT)) % ALIGNMENT;

    // 调整缓冲区地址至对齐位置
    ws2812_buffer = temp + padding;
}

// 使用完毕释放内存(需释放原始地址)
void deinit_ws2812_buffer() {
    if(ws2812_buffer) {
        free(ws2812_buffer - padding);
        ws2812_buffer = NULL;
    }
}
内存利用率高,适用于动态分配场景缺点:需要额外管理填充字节,增加代码复杂度

麻花油条 发表于 2025-9-30 11:44 | 显示全部楼层
动态分配方案适合需要灵活管理内存的场景,但需注意指针安全和内存释放。
麻花油条 发表于 2025-9-30 11:44 | 显示全部楼层
静态分配方案更简单安全,适合缓冲区大小固定的场景。
classroom 发表于 2025-9-30 11:44 | 显示全部楼层
代码还需要改进一下比较好
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

502

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部