问题标签 [memory-alignment]

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.

0 投票
2 回答
16036 浏览

visual-c++ - 跨平台 ALIGN(x) 宏?

我想创建一个struct具有一定对齐的。

我想为 GCC 和 VisualC++ 编译器使用相同的结构定义。

在 VisualC++ 中,通常这样做:

在 GCC 中,通常会这样做:

我当然可以创建适当的宏来完成这项工作:

因此能够透明地处理这两种情况,但在这里我必须复制对齐常量 ( 32),这是我想避免的。

GCC 中的另一种方法是__attribute__在 struct 标记之后放置,如docs 中所述,如下所示:

因此我可以使这种类型的语法工作:

有人有更好的版本吗?其他想法?我尝试了一些代码搜索,但没有发现任何很有希望的东西。


更新:根据@John 的评论,这是另一个可以工作的版本(我还没有编译它,但文档表明这是一个不错的主意)

0 投票
3 回答
9645 浏览

c - 为什么 GCC 使用 NOP 填充功能?

我使用 C 语言已经有一段时间了,最​​近才开始接触 ASM。当我编译一个程序时:

objdump 反汇编有代码,但在 ret 之后没有:

从我学到的 nops 什么都不做,因为在 ret 之后甚至不会被执行。

我的问题是:为什么要打扰?ELF(linux-x86) 不能与任何大小的 .text 部分(+main) 一起使用吗?

我会很感激任何帮助,只是想学习。

0 投票
3 回答
996 浏览

c++ - 便携式C++对齐?

我想将 Pimpl 成语与本地存储成语一起应用:


我的类型.h


我的类型.cpp


我对这种方法唯一关心的是对齐m_storagechar不保证以与 int 相同的方式对齐。原子可能有更严格的对齐要求。我正在寻找比 char 数组更好的东西来声明存储,它使我能够定义(和断言)对齐值。你知道这样的事吗?也许一个boost库已经这样做了?

0 投票
2 回答
2036 浏览

objective-c - Objective-C 运行时:class_addIvar 的大小和对齐方式是什么?

Objective-C 运行时提供了 class_addIvar C函数:

我要做什么sizealignment

我正在添加一个 type 的实例变量UITextPosition *,但范围内没有UITextPosition对象。对于size,我可以做sizeof(self),哪里self是一个子类UITextField?即,我可以假设一个UITextPosition对象与一个对象的大小相同UITextField吗?

我怎么得到alignment

0 投票
1 回答
791 浏览

c++ - G++ 4.2 SSE 指令的内联汇编使用对齐的 XMM 寄存器副本包装用户汇编代码

我有一个使用内联汇编的函数:

它被编译为以下汇编代码:

代码效率不是很高,但这不是我关心的问题。如您所见,内联汇编器插入了一条从 %eax 中的地址复制到 xmm0 的 movdqa 指令。问题是指针 vec8w* m不是128 字节对齐的,所以在执行 movdqa 时出现段错误。我的问题是是否有办法指示内联汇编器使用 movdqu 而不是 movdqa (默认情况下使用)?我试图寻找一种使用 G++ 的 SSE 内在函数的解决方法,但不知何故我在 xmmintrin.h 文件中找不到 movdqu (我想应该在哪里声明它)。不幸的是,我无法修改代码,以便始终为对齐的参数 m 调用该函数。

0 投票
1 回答
143 浏览

assembly - 联合地址对齐

我对联合的内存地址调整有点困惑。

我们在编写代码时使用了几个对齐规则,例如:

“该联盟将如何对齐”对于这些条件;如果

平台 linux 程序集 x86 64 位

注意:如果您有更好的意见,请随时改进该问题

0 投票
1 回答
366 浏览

xamarin.ios - MonoTouch 和不安全的浮点数

谁能帮我。我有这个“非托管”.NET 代码,它可以在带有 MonoTouch 设备模拟器的 PC 平台和 OSX 上运行。但是当我在 iPad 2 设备上运行代码时,它会引发异常。我试图使代码变得简单以显示问题。

在我的设备上,当 &buffer[] 中的索引为 0、4 - 四个字节对齐为 float32 时,它可以工作,但其他所有字节都失败。

我很想知道,这是 MonoTouch 不安全实现中的一个错误,还是我错过了一些有关 .NET 和不安全代码的信息。

我已经做了一个解决方法,当句柄浮动时我是否在 4 字节缓冲区中读/写,然后将数据复制到数组中的正确位置,但如果我错过了解有关 . NET/iPad 设备浮点处理,否则这是一个错误。int64 类型没有问题。

由于与 PLC 设备的 tcp 通信,我们正在使用不安全的数组处理,我们是否使用 uint8/uint16 数组并传输数据块以获得更高的数据吞吐量。

如果有人有时间,这里有一个测试功能,尝试重现它:

非常感谢,

最好的问候, 卡斯帕沃勒森

0 投票
1 回答
2964 浏览

c++ - #pragma pack、模板类型定义和结构对齐

使用 Visual Studio 或 gcc,如果我有

然后稍后:

thisInstance的结构对齐是什么?也就是说,对于 typedef 的模板类,pragma pack 是在 typedef 的位置生效还是在变量定义的位置生效?如果是后者,那么获得跨文件对齐的类型有什么好的解决方法?

0 投票
2 回答
6986 浏览

c++ - MSVC 默认内存对齐为 8

根据MSDN,该/Zp命令默认为 8,这意味着使用 64 位对齐边界。我一直假设对于 32 位应用程序,MSVC 编译器将使用 32 位边界。例如:

编译器会像这样填充它:

因此,由于/Zp8默认使用,这是否意味着使用上面的相同示例我的填充变为 7+4 字节:

这有点荒谬不是吗?我是不是误会了?为什么要用这么大的padding,好像很浪费空间。32 位系统上的大多数类型甚至不会使用 64 位,因此大多数变量都会有填充(可能超过 80%)。

0 投票
3 回答
248 浏览

c - 是否有标准宏来检测需要对齐内存访问的架构?

假设类似:

通过编写如下内容,我可以在非对齐访问机器(例如 x86)上更快地运行:

但是它需要建立在几个架构上,所以我想做类似的事情:

但是我找不到任何关于编译器定义的宏(如我__ALIGNED4__上面的假设)指定对齐或使用预处理器确定目标体系结构对齐的任何巧妙方法的任何好的信息。我可以测试defined (__SVR4) && defined (__sun),但我更喜欢 Just Work TM在其他需要对齐内存访问的架构上的东西。