问题标签 [pragma-pack]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - #pragma 包效果
我想知道是否有人可以向我解释#pragma pack
预处理器语句的作用,更重要的是,为什么要使用它。
我查看了MSDN 页面,它提供了一些见解,但我希望从有经验的人那里听到更多。我以前在代码中见过它,但我似乎再也找不到在哪里了。
c++ - C++ #pragma 包
以下语句实际上做了什么以及它的效果是什么?
c++ - 网络编程中的“#pragma pack”是什么?
我下载了一个教程,它在头文件中有这些行。如果你们能提供与此相关的任何教程或参考资料,我将不胜感激。
c - gcc 的 __attribute__((packed)) / #pragma pack 不安全吗?
在 C 中,编译器将按照声明的顺序排列结构的成员,并在成员之间或最后一个成员之后插入可能的填充字节,以确保每个成员正确对齐。
gcc 提供了一个语言扩展 ,__attribute__((packed))
它告诉编译器不要插入填充,从而允许结构成员不对齐。例如,如果系统通常要求所有int
对象具有 4 字节对齐,__attribute__((packed))
可能会导致int
结构成员以奇数偏移量分配。
引用 gcc 文档:
`packed' 属性指定变量或结构字段应该具有最小可能的对齐方式——变量一个字节,字段一个位,除非您使用 `aligned' 属性指定更大的值。
显然,使用此扩展可能会导致更小的数据需求但更慢的代码,因为编译器必须(在某些平台上)生成代码以一次访问一个字节的未对齐成员。
但是在任何情况下这是不安全的吗?编译器是否总是生成正确的(虽然速度较慢)代码来访问打包结构的未对齐成员?它甚至有可能在所有情况下都这样做吗?
c++ - iphone上的pragma pack(推送)
我在#pragma pack(push,1)
and中有一个结构#pragma pack(pop)
。我想知道这是否可以在 iphone 编译器上正常工作,以及这些宏之外是否还有其他副作用。
谢谢,拉克斯万。
c++ - Visual Studio 中 pragma pack 指令的范围
#pragma pack
Visual C++中对齐的范围是什么?API 参考
https://msdn.microsoft.com/en-us/library/vstudio/2e70t5y1%28v=vs.120%29.aspx
说:
pack 在看到 pragma 后的第一个结构、联合或类声明时生效
因此,对于以下代码:
我已经预料到:
但我收到了:
这就是为什么我有点惊讶,我非常感谢你能提供的任何解释。
c++ - __attribute__((__packed__)); 有什么区别?和#pragma pack(1)
我正在将在 Linux 上完美运行的代码移植到 windows visual c++。我在 Linux 中有这段代码:
我在 Windows 上遇到错误:
我想知道是否可以通过使用来修复此错误
它们之间有什么区别吗?是否有任何语法可以在 Linux 和 Windows 中用于此属性?
visual-c++ - #pragma pack(8) 应该如何工作?
我是结构对齐和打包的新手。我以为我明白了,但我发现了一些我没想到的结果(见下文)。
我对结构对齐的理解是:
类型通常在其大小的倍数的内存地址上对齐。
根据需要添加填充以促进正确对齐
结构的末尾必须填充到最大元素的倍数(以方便数组访问)
该#pragma pack
指令基本上允许覆盖基于类型大小对齐的一般约定:
令我惊讶的是,在 VS 2015 x86 上 sizeof(SPack8) == 24。似乎 d 没有在 8 字节地址上对齐:
有人可以解释发生了什么/我误解了什么吗?
谢谢!
c++ - 打包结构成员的传递地址
我正在开发一个 C/C++ 应用程序,其中我正在使用打包的结构成员。我读过我们永远不应该将压缩结构成员的地址传递给任何函数(当通过引用函数作为参数传递压缩结构成员时,我总是会遇到对齐错误)。所以我想知道这是否适用于 sscanf 等内置类似函数的情况。这是我的代码片段
我正在运行我的 Power PC 架构应用程序。
c - C - 为什么#pragma pack(1) 将 6 位结构成员视为 8 位?
#pragma pack(1)
在定义字段6-bit
并将其假定为8-bit
. 我读了这个问题来解决我的问题,但它根本没有帮助我。
在Visual Studio 2012中,我定义struct
了以下用于保存Base64
字符:
现在我得到了它的大小sizeof
,但结果不是我所期望的:
结果 :4
我期望得到3
(因为6 * 4 = 24
,所以24
位是3
字节)
事件我用1-bit
字段测试它并得到正确的大小(1字节):
实际上,为什么6-bit
假设8-bit
与#pragma pack(1)
?