问题标签 [cpu-registers]

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 投票
7 回答
1482 浏览

multithreading - 计算机如何只使用几个寄存器?

我对汇编知之甚少,通用寄存器有 4 或 8 个左右。计算机上的所有程序如何使用这么多的寄存器工作,尤其是多线程和一切?

0 投票
9 回答
10995 浏览

c - 为什么不能将寄存器变量设为全局?

从站点读取时,您无法创建寄存器类型的全局变量。为什么会这样?来源: http: //publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp ?topic=/com.ibm.xlcpp8l.doc/language/ref/regdef.htm

0 投票
5 回答
508 浏览

c++ - 现代 CPU 内循环间接优化

来自http://www.boost.org/community/implementation_variations.html

“......编码差异,例如将类从虚拟成员更改为非虚拟成员或删除间接级别,除非在内部循环深处,否则不太可能产生任何可衡量的差异。即使在内部循环中,现代 CPU 也经常执行这样的操作在相同数量的时钟周期内竞争代码序列!”

我试图理解“即使在内部循环中”部分。具体来说,CPU 实现了哪些机制来在相同数量的时钟周期内执行两个代码(虚拟与非虚拟或额外的间接级别)?我知道指令流水线和缓存,但是如何在与非虚拟调用相同的时钟周期内执行虚拟调用?间接如何“丢失”?

0 投票
5 回答
2797 浏览

c++ - gcc/g++ 可以在忽略我的寄存器时告诉我吗?

使用 gcc/g++ 编译 C/C++ 代码时,如果它忽略了我的寄存器,它可以告诉我吗?例如,在这段代码中

j 将用作寄存器,但在此代码中

j 将是一个正常变量。它可以告诉我我使用寄存器的变量是否真的存储在 CPU 寄存器中?

0 投票
3 回答
35570 浏览

cpu-registers - CPU寄存器和CPU缓存有区别吗?

CPU寄存器和CPU缓存有区别吗?

0 投票
6 回答
16009 浏览

cpu-architecture - 为什么 CPU 寄存器访问速度快?

寄存器变量是一种众所周知的快速访问方法(register int i)。但是为什么寄存器在层次结构的顶部(寄存器、缓存、主存储器、辅助存储器)?是什么让访问寄存器如此之快?

0 投票
2 回答
2049 浏览

delphi - 在 Delphi 中的 asm 过程结束时要恢复哪些 CPU 寄存器

用汇编代码编写Delphi程序或函数时,程序结束时必须保存哪些寄存器并恢复为原始值?

当从(内联)汇编代码调用另一个 Delphi 过程或函数时,我可以期望其他函数对寄存器做什么?哪些寄存器会恢复到原来的值,哪些不会?

(显然,相同的答案将适用于这两个问题)

我假设 Delphi 的默认调用约定。我知道它EAX用于 32 位返回值。查看 SysUtils.pas 中的 asm 代码,似乎EBX,ESIEDI被推送和恢复,但其他不是。不过,我找不到任何关于此的文档。

0 投票
10 回答
5820 浏览

memory - 我们可以拥有一台只有寄存器作为内存的计算机吗?

寄存器是计算机中最快的存储器。因此,如果我们想构建一台只有寄存器甚至没有缓存的计算机,这可能吗?我什至想用寄存器代替磁盘,尽管它们自然是易失性存储器。我们是否有一些用于该用途的非易失性寄存器?会变得如此之快!我只是想知道这是否会发生?

0 投票
2 回答
3802 浏览

memory - ARM NEON:vld4_f32 和 vld4q_f32 有什么区别?

我无法区分ARM NEON 指令vld4_f32之间的区别。vld4q_f32

当我提高编码水平并开始查看汇编指令而不是信息量较少的内在函数时,困惑就开始了。

我需要在这里使用vld4变体指令的原因是,我想从我的大数组的每4 个位置捕获4 个。 float32_t

替代文字

内在函数和相应的vld4_f32汇编指令如下所示(来自此链接

vld4q_f32内在函数及其相应的汇编指令如下所示

好吧,在内部函数级别,我看到的区别是返回类型,但是如果我查看汇编指令和寄存器的数量,它们看起来都一样。编译器或汇编器如何知道两者之间的区别?

有人可以对此进行更多澄清并解释我如何将位于每个第 4 个内存位置的4 个 float32_t值加载到单个寄存器中吗?

0 投票
4 回答
282 浏览

c - C代码分析

这是我在 64 位 linux 机器上编写的函数。

现在我的问题是:

  1. 变量“a”是否会存储在寄存器中,这样就不会从 RAM 或 chache 一次又一次地访问它?
  2. 在 64 位架构上工作,我是否应该假设“arr”数组将存储在寄存器中,因为函数参数存储在 64 位架构的寄存器中?
  3. 指针类型转换的效率如何?我的猜测是它应该是低效的吗?

任何帮助都将不胜感激。

问候