Tag: x86 64

内存alignment:如何使用alignof / alignas?

我现在使用共享内存。 我无法理解alignof和alignas 。 cppreference不清楚: alignof返回“alignment”,但什么是“alignment”? 要为下一个要alignment的块添加的字节数? 填充大小? 堆栈溢出 /博客条目也不清楚。 有人可以清楚地alignof和alignas ?

编译为C ++与C时,GCC代码生成的巨大差异

我一直在玩x86-64程序集,尝试了解更多可用的各种SIMD扩展(MMX,SSE,AVX)。 为了看看不同的C或C ++构造如何通过GCC转换为机器代码,我一直在使用Compiler Explorer ,它是一个非常出色的工具。 在我的一个“游戏会话”中,我想看看GCC如何优化整数数组的简单运行时初始化。 在这种情况下,我试图将0到2047的数字写入2048个无符号整数的数组中。 代码如下所示: unsigned int buffer[2048]; void setup() { for (unsigned int i = 0; i < 2048; ++i) { buffer[i] = i; } } 如果我启用优化和AVX-512指令-O3 -mavx512f -mtune=intel GCC 6.3生成一些真正聪明的代码:) setup(): mov eax, OFFSET FLAT:buffer mov edx, OFFSET FLAT:buffer+8192 vmovdqa64 zmm0, ZMMWORD PTR .LC0[rip] vmovdqa64 zmm1, ZMMWORD PTR .LC1[rip] .L2: […]

在x86中暂停指令

我正在尝试创build自旋锁的哑版。 浏览网页时,我遇到了x86中的汇编指令,这个指令用于向处理器提示当前在该CPU上正在运行旋转locking。 英特尔手册和其他可用信息状态 The processor uses this hint to avoid the memory order violation in most situations, which greatly improves processor performance. For this reason, it is recommended that a PAUSE instruction be placed in all spin-wait loops. The documentation also mentions that "wait(some delay)" is the pseudo implementation of the instruction. 上段的最后一行是直观的。 如果我没有成功抓住锁,我必须等待一段时间,然后再次抓住锁。 但是,在自旋锁的情况下,由于内存顺序违反,我们是什么意思? […]

primefacesvariables是否是无锁的?

当我们谈论primefacesvariables,例如C ++ 11的atomic<> ,它是否可以自由locking? 或者是无锁的东西有所不同? 如果我用primefacesvariablespipe理一个队列,它会比一个无锁队列慢吗?

x86_64寄存器rax / eax / ax / al覆盖整个寄存器的内容

正如广泛宣传的那样,现代x86_64处理器有64位寄存器,可以以32位寄存器,16位寄存器甚至8位寄存器的后向兼容方式使用,例如: 0x1122334455667788 ================ rax (64 bits) ======== eax (32 bits) ==== ax (16 bits) == ah (8 bits) == al (8 bits) 这样的scheme可以从字面上理解,也就是说,人们总是只能使用指定的名称来访问寄存器的一部分,以便读写,这是非常合乎逻辑的。 实际上,对于高达32位的所有内容都是如此: mov eax, 0x11112222 ; eax = 0x11112222 mov ax, 0x3333 ; eax = 0x11113333 (works, only low 16 bits changed) mov al, 0x44 ; eax = 0x11113344 (works, only low 8 […]

新的X86_64处理器寄存器的名称是什么?

我在哪里可以find在这个架构上assembly的新寄存器的名称? 我指的是X86中的寄存​​器,比如EAX,ESP,EBX等,但是我希望它们在64位。 我不认为它们与拆解我的C代码时是一样的,我得到r而不是e。

objdump如何发出intel语法

我怎样才能告诉objdump在英特尔语法中发出程序集而不是默认的AT&T语法?

将32位C ++代码移植到64位 – 值得吗? 为什么?

我知道一些显着的x64架构(更高的可寻址RAM地址等)的收益…但是: 如果我的程序没有真正需要在本地64位模式下运行,该怎么办? 我应该移植它吗? 是否有可预见的结束32位支持的最后期限? 我的应用程序能够像原生x64代码一样运行得更快/更好/更安全吗?

malloc如何在multithreading环境中工作?

典型的malloc (针对x86-64平台和Linux操作系统)是否在开始时天真地locking了一个互斥锁,并在完成时释放它,还是以更聪明的方式locking互斥锁,从而减lesslocking争用? 如果这确实是第二种方式,它是如何做到的?

我在哪里可以find全面的x86_64汇编指令列表?

我正在做一个涉及“解散二进制炸弹”的科幻类实验室,基本上是对一个程序进行逆向工程以获得6个“密码”。 我只是在一个易于阅读的地方寻找所有说明的清单。