处理字节对齐的函数
2013-08-15 16:16
169 查看
所谓字节对齐问题,是指在内存中一个基本数值类型变量应该位于其sizeof大小的整数倍边界上,换句话说,就是一个基本数值类型变量的地址能够被其sizeof大小所整除。比如,对于short类型,其地址应该能够2整除,而对于double类型,则要求能被8整除。
这样做是由CPU运算时获取值的特性决定的,现在,大多数CPU都能处理字节不对齐的问题,但对于一些嵌入式CPU,我们仍需加以重视,不然将导致程序出现异常,而且,从效率角度来讲,我们也应该避免字节不对齐的情况出现。
下面是一个将任意地址按照指定对齐大小进行向上对齐的函数:
char* make_align(char* src, size_t aligned)
{
return (src + aligned - 1) & ~(aligned - 1);
}
上述函数要求aligned必须为2的幂,比如4、8、16等,实际中我们也只会碰到这种情况,如果要按照任意字节对齐,可以采用如下函数:
char* make_align(char* src, size_t aligned)
{
return (src + aligned - 1) / aligned * aligned;
}
这样做是由CPU运算时获取值的特性决定的,现在,大多数CPU都能处理字节不对齐的问题,但对于一些嵌入式CPU,我们仍需加以重视,不然将导致程序出现异常,而且,从效率角度来讲,我们也应该避免字节不对齐的情况出现。
下面是一个将任意地址按照指定对齐大小进行向上对齐的函数:
char* make_align(char* src, size_t aligned)
{
return (src + aligned - 1) & ~(aligned - 1);
}
上述函数要求aligned必须为2的幂,比如4、8、16等,实际中我们也只会碰到这种情况,如果要按照任意字节对齐,可以采用如下函数:
char* make_align(char* src, size_t aligned)
{
return (src + aligned - 1) / aligned * aligned;
}
相关文章推荐
- 处理字节对齐的函数
- 处理字节对齐
- 字节对齐详解-----(二)ARM下的对齐处理
- printf函数十六进制格式化输出并且2字节对齐
- DSP C6000汇编,数据字节非对齐问题的处理
- 字节处理函数
- dll回调给java的函数参数需要有字节数组类型参数的处理
- 字节对齐处理技巧
- UNICODE下和多字节字符编码的字符串处理函数对照
- 使用php自带的多字节处理函数来处理中文,最佳方法
- 字节对齐的处理
- Utf8,Unicode,多字节等一些字符集的处理函数
- 保证函数调用时stack的起始地址是十六字节对齐的方法
- Linux C编程--网络编程1--字节顺序和字节处理函数
- C语言中的字节对齐以及其相关处理
- 【Windows核心编程】一些处理单字节、双字节的函数
- Linux C编程--网络编程1--字节顺序和字节处理函数
- 新发现 -- -struct 的内存管理 -- 4字节对齐问题
- STM32的串口函数_库函数USART_SendData问题和解决方法--硬件复位导致第一个字节丢失
- 四字节内存对齐