今天有时间对alignment重新学习了一下,发现自己之前对alignment的理解是片面的。
alignment理解
alignment的含义可以分为两部分:
1.数据对齐,即这个对象的地址是多少的倍数。
int *p = (int *)malloc(sizeof(int));
在32位机种这段代码中p的值就为8的倍数,因为malloc返回的值需要满足系统中所有的基本数据类型的对齐要求。
2.结构的数据填充。
typedef struct {
char c;
short sh;
int word;
}
在默认alignment下这个结构中在c后面就会填充一个字节。因为short的alignment是2,所以会填充一个空字节,来达到short的alignment要求。
各种基础类型的alignment
char为1,short为2,int为4,long为4,long long为8。结构的
alignment 为其所有元素的alignment的最大值。
#pragma pack(n)的理解
如果在程序中指定pack那么是不是所有元素的alignment就为n了呢?
答案是否定的。
在制定了pack(n)的时候,编译器确定alignment的方法是系统默认alignment和指定alignment的最小值,比如char的alignment仍为1,short的alignment为min(2,n)。
另外pack这条语句对malloc并没有任何影响,malloc返回值仍是满足系统中所有基本数据类型的对齐要求。那如果你需要malloc返回的地址有更大的alignment怎么办呢?
使用memalign。具体可以参考http://www.kernel.org/doc/man-pages/online/pages/man3/posix_memalign.3.html
分享到:
相关推荐
在华为eNSP平台上实现企业级网络模拟与仿真.docx在华为eNSP平台上实现企业级网络模拟与仿真.docx在华为eNSP平台上实现企业级网络模拟与仿真.docx在华为eNSP平台上实现企业级网络模拟与仿真.docx在华为eNSP平台上实现...
底部自动填充对齐jquery瀑布流是一款jquery waterfall瀑布流布局,自动底部填充对齐的瀑布流布局样式。
jquery瀑布流分类展示特效底部自动填充对齐效果
我们需要以某种对齐方式将文本做格式化处理。 解决方案 对于基本的字符串对齐要求,可以使用字符串的ljust()、rjust()和center()方法。示例如下: >>> text = 'Hello World' >>> text.ljust(20) 'Hello World ' >>>...
jQuery自动底部填充对齐的瀑布流布局.zip
总结了字节对齐的一些规则,主要是结构体里边界填充后的字节对齐问题。
底部自动填充对齐jquery瀑布流是一款jquery waterfall瀑布流布局,自动底部填充对齐的瀑布流布局样式。
format使用方法较多,这里只说明其在填充与对齐上的使用方法: 填充与对齐 填充常跟对齐一起使用 ^、<、>分别是居中、左对齐、右对齐,后面带宽度 :号后面带填充的字符,只能是一个字符,不指定的话默认是用空格...
图案填充命令启动方式:快捷命令H,或在功能区绘图面板中选择图案填充命令。 一、确定边界 在进行图案填充时,首先应确定需要填充图案的边界,确定边界的方法有两种,一种是拾取封闭区域的点或者选择边界对象。 1、...
jQuery底部自动填充瀑布流代码是一款比较简洁的jQuery瀑布流代码,不到100行代码却能兼容所有主流浏览器。
缓存填充 通过填充并使其与高速缓存行的长度对齐来防止错误共享。 在并发编程中,有时需要确保不会将... CachePadded的对齐方式是N个字节的最大值和T的对齐方式。 例子 对齐和填充: use cache_padded :: CachePad
极力推荐一款主流分区助手,无损分区对齐功能强大,安全效率 功能:扩展分区、复制硬盘、复制分区、迁移系统、恢复分区、转换器、制作启动光盘、安全擦除固态、复制硬盘、删除分区、检测坏扇叶、转换GPT格式、重建...
内存对齐3.1 结构体成员默认内存对齐3.2 不同架构内存对齐方式3.3 小试牛刀3.3.1 前置填充3.3.2 中间填充3.3.3 尾随填充 1. 同个结构体占用内存可变化 在 C语言之结构体 章节里,对struct的功能和使用进行...
文章目录Center (居中布局)Padding (填充布局)Align (对齐布局) Center (居中布局) 在Center布局中,子元素处于水平和垂直方向的中间位置。代码如下: void main() => runApp(MyApp()); class MyApp extends...
底部自动填充对齐jquery瀑布流是一款jquery waterfall瀑布流布局,自动底部填充对齐的瀑布流布局样式。
几年前我在知道 CATPAD 存在之前写了这篇文章。... 在被填充的维度的末尾对齐新项目 - 即填充“在前面”。 例如, 南猫(1,[1 2 3; 4 5 6], [7 8]) 回答= [ 1 2 3 4 5 6 7 8 南] 但NANCAT(1, [1 2 3;
通过将光标和视图移动到左侧和右侧相似的位置并按F3(或3),它们可以对齐。这是在标准配置中逐块完成的,这意味着光标附近的字节首先对齐,另一个稍后显示。 也可以通过使用更改设置来进行全局和局部对齐(一次对...
PER 有两个变体:对齐方式和非对齐方。对齐方式用于:Iub、Iur、Iu 接口的ASN.1 的 传输编码。非对齐方式:仅用于空中(UU)接口的 ASN.1 转换,两者的编码过程基本相同。 在对齐的方式下,若前面所有单元的信息经编码后...