使用c语言计算实现size向上对齐到4096byte。4KB向上对齐

本文探讨C++中如何通过alignLen计算确保内存对齐,特别关注uint32_t类型,并揭示了4095操作在内存布局中的作用。

c++之内存大小对齐。
uint32_t alignLen = (size + 4095) & (~4095);


#include <iostream>
#include <stdint.h>
#include <stdio.h>

#define ALIGN_4096(size) (((size) + 4095) & (~4095))

uint32_t aligned_size = ALIGN_4096(5000);  // 示例:5000 -> 8192

/**
size + 4095:确保 size不足 4096 时能进位到下一个对齐边界。
& (~4095):清除低 12 位),得到对齐后的值。
*/
uint32_t alignTo4096(uint32_t size) {
	return (size + 4095) & (~4095);
}

uint32_t align(uint32_t size) {

	return ((size + 4095) / 4096 ) * 4096;
}

int test() {
    printf("%u -> %u\n", 1, ALIGN_4096(1));      // 1 -> 4096
    printf("%u -> %u\n", 4095, ALIGN_4096(4095)); // 4095 -> 4096
    printf("%u -> %u\n", 4096, ALIGN_4096(4096)); // 4096 -> 4096
    printf("%u -> %u\n", 5000, ALIGN_4096(5000)); // 5000 -> 8192
    return 0;
}

// 使用c语言计算实现size向上对齐到4096byte。4KB向上对齐
int main()
{
	std::cout << "Hello World!\n";
    test();
	return 0;
}


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值