系统:Windows8.1 64bit CS

这两天正好看到InitializeACL()  msdn.microsoft.com/en-us/library/windows/desktop/aa378853(v=vs.85).aspx

其中nAclLength [in]要求". In addition, this value must be DWORD-aligned. For more information about calculating the size of anACL, see Remarks.",而后面的例子是这么做align的

  1. // Align cbAcl to a DWORD.

  2. cbAcl = (cbAcl + (sizeof(DWORD) - 1)) & 0xfffffffc;

那到底什么是aligned呢,为什么cbAcl要那么计算呢??

幸好有【ri_aje】的回答:

 cbAcl = (cbAcl + (sizeof(DWORD) - 1)) & 0xfffffffc;

cbAcl要被DWORD-aligned的意思就是能被4整除     在windows 32位、64位上DWORD都是4字节(64位上有个单独的DWORD64),即能被4整除。

http://stackoverflow.com/questions/39419/visual-c-how-large-is-a-dword-with-32-and-64-bit-code

任意数X要做到能被DWORD/4整除要做2步(类似可以扩展到WORD,DWORD64吧)

1.  X=X+(sizeof(DWORD)-1)    假设X∈【N*4 , (N+1)*4 ),N属于正整数。 X加上sizeof(DWORD)-1的目的是为了得到不小于X的并能被4整除的N*4或(N+1)*4

2. X=X & 0xfffffffc   与0xfffffffc的目的就是让X能被4整除。 若X==N*4,那最后我们得到N*4; 若X>N*4,那最后我们得到(N+1)*4

根据MSDN的DWORD-aligned定义  http://msdn.microsoft.com/en-us/library/aa369366%28v=vs.85%29.aspx

Each data structure in a value list must begin on a DWORD boundary. This means that the distance (in bytes) between the start of the value list buffer and the start of any data structure is always an even multiple of sizeof(DWORD).

这里要注意的是

1.   “begin on a DWORD boundary.”:DWORD是4字节,故DWORD bounday就是能被4整除的地方

2. "an even multiple of" :这里even不是偶数的意思,而是作为adv. "used to emphasize something unexpected or surprising",强调multiple of,即整数倍sizeof(DWORD)

四字节对齐(DWORD-aligned)相关推荐

  1. 关于C++中四字节对齐的坑

    最近做一个工程,大体的意思是在程序中定义一个结构,运行中会将结构直接写到文件中,然后另一个程序会用同样的结构读出来.为了验证是写文件的程序的问题还是读文件的程序的问题,用winhex来打开文件,仿照结 ...

  2. C语言——四字节对齐(4对齐后是4, 5对齐后是8)

    1.功能描述 实现数值的,四字节对齐,若数值是4的倍数,则不变:若不是4的倍数则改变: 2.结果显示 如下所示:7四字节对齐后是8:8四字节对齐后是8: [root@localhost 2019061 ...

  3. Opencv中IplImage的四字节对齐问题

    一.结构解释 IplImage数据结构体中有两个宽度: 1 是width属性,表示图像的每行像素数: 2 是widthStep属性,表示存储一行像素需要的字节数. 在OpenCV里边,widthSte ...

  4. c语言四字节对齐,C语言字节对齐详解

    先了解4个基本概念: 1.数据类型自身对齐值:即数据类型的大小(数组取数组成员类型的自身对齐值),如char的自身对齐值是1,short是2,int.float.double都是4,单位字节 2.结构 ...

  5. C/C++结构体四字节数据对齐

    为了避免混淆,做如下规定,以下代码若不加特殊说明都运行于32位平台,结构体的默认对齐值是8,各数据类型所占字节数分别为 char占一个字节 int占四个字节 double占八个字节. 两个例子 请问下 ...

  6. 顶级c程序员之路 选学篇-1 深入理解字节,字节序与字节对齐

     深入理解字节,字节序与字节对齐 一 总述 作为一个职业的coder玩家,首先应该对计算机的字节有所了解. 我们经常谈到的2进制流,字节(字符)流,数据类型流(针对编程),结构流等说法,2进制流,0和 ...

  7. arm的字节对齐问题总结(转)

    问题由来:pc的lsb总是0,因为代码至少要字对齐.cm3的指令至少是半字对齐的(16) 一.啥是字对齐?为啥要字对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访 ...

  8. 计算机中的字节对齐问题

    [转载]http://www.cnblogs.com/clover-toeic/p/3853132.html 引言 考虑下面的结构体定义: 1 typedef struct{ 2 char c1; 3 ...

  9. C语言 字节对齐问题 详解

    一  什么是字节对齐 现代计算机中,内存空间按照字节划分,理论上可以从任何起始地址访问任意类型的变量.但实际中在访问特定类型变量时经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排 ...

最新文章

  1. 如何利用遗传算法进行自变量降维
  2. 常用控件产品官方文档/手册/API列表 c#控件文档API列表 asp.net控件产品技术文档中文版...
  3. Kettle transformation 操作内容快速查询
  4. POJ 3348 Cows 凸包面积
  5. 01背包问题,动态规划求解
  6. vuex commit 模块_Vuex详细介绍
  7. Struts项目中引入了过滤器filter后出现中文乱码情况
  8. Python中的闭包与参数引用域
  9. 《高性能Linux服务器构建实战:系统安全、故障排查、自动化运维与集群架构》——3.3 DRBD的管理与维护...
  10. EasyRecovery2022强力数据恢复软件
  11. Android之飞鹅WiFi打印机
  12. 臻色调女装官网评价:专业人士展示行业数据
  13. Java 五子棋(一)绘制棋盘、棋子
  14. Excel中ID相同对应表格内容进行合并
  15. 数据库SQLServer的视图
  16. 2020-09-24
  17. 【教学类-12-02】20221105《连连看12*4-分栏4-不重复24个)(小班主题《白天与黑夜》)
  18. 单文件程序制作一键通三合一 v5.10 杏雨梨云版
  19. cad计算机绘图知识点,cad制图初学入门方法与技巧
  20. 从单片机初学者迈向单片机工程师前传----写给初学者的话

热门文章

  1. 安装 express4 linux,nodejs+express4.0+mongodb安装方法 for Linux, Mac
  2. php进攻教程,如何对PHP程序中的常见漏洞进行攻击(下)_php基
  3. 前端处理带t的时间_大厂实践:如何优雅的监控前端页面性能
  4. html5盒子模型作业,html5 盒子模型案例
  5. 联发科有没有高端处理器_联发科陷入“危机”,高端处理器无人使用,只能依靠OPPO?...
  6. 编辑流程图_作为一名采购商,做不好采购?送你5套采购流程图模板
  7. python3.5升级_python升级 (2.6升级到3.5)
  8. MII 功能简介(论坛整理)
  9. C 语言回顾,数组指针的使用(小鸡肋的使用)
  10. 北京交通大学计算机科学与技术研究生导师,熊轲_北京交通大学研究生导师信息...