内存对齐?
1, 内存分配的时候,为什么要内存对齐,
加入, 要分配4096BYTE大小内存, 以16字节对齐, 怎么做?
2
[解决办法]
去看这个
http://blog.ednchina.com/colinluan/159417/message.aspx
[解决办法]
内存对齐应该是可以设置的
[解决办法]
1.某些平台要求对齐有利于提高访问速度,而且如果不对齐可能出现访问错误。
[解决办法]
内存对齐可以提高访问数度。
详细的,可以看看 深入理解计算机系统
[解决办法]
提高访问速度
[解决办法]
#pragma pack( push, 1 ) // 设置按单字节对齐,不加这个下面两个结构体占用空间会不同(虽然表面上看上去相同)struct SMyStructA{ bool A; int C; char B;};struct SMyStructB{ bool A; char B; int C;};#pragma pack( pop )
[解决办法]
对齐很简单的,举个例子:
要求地址是16的倍数,给你一个地址,其二进制表示是:01101110,要求对齐后地址是16倍数,且大于等于当前地
址。
最低4位是1110,这些位只有全部是0,整个地址才能被16整除。
所以,分两种情况:
1,低4位本来就是0000,那么当前地址已经对齐了。
2,低4位不是0000,那么对齐的方法就是让低4位是0000,而且给地址加上10000,这就是比原地址大的第一个是16倍数的地址了。
size_t round_up(size_t bytes, size_t align) { // 将bytes按照align对齐。一般bytes < align return (((bytes) + align - 1) & ~(align - 1));}