问题标签 [cpu-architecture]
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.
cpu-architecture - 为什么 CPU 寄存器访问速度快?
寄存器变量是一种众所周知的快速访问方法(register int i
)。但是为什么寄存器在层次结构的顶部(寄存器、缓存、主存储器、辅助存储器)?是什么让访问寄存器如此之快?
c - Best way to assert compatible architecture when reading and writing a file?
I have a program that reads and writes a binary file. A file is interchangeable between executions of the program on the same platform, but a file produced on one machine may not be valid on another platform due to the sizes of types, endian-ness etc.
I want a quick way to be able to assert that a given file is valid for reading on a given architecture. I am not interested in making a file cross-architecture (in fact the file is memory-mapped structs). I only want a way of checking that the file was created on an architecture with the same size types, etc before reading it.
One idea is to write a struct with constant magic numbers in to the start of the file. This can be read and verified. Another would be to store the sizeof
various types in single-byte integers.
This is for C but I suppose the question is language-agnostic for languages with the same kinds of issues.
What's the best way to do this?
I welcome amendments for the title of this question!
powershell - 如何使用 x86 和 x64 版本管理 PowerShell 管理单元的开发
我目前正在编写一个 PowerShell 管理单元,该管理单元对专门针对 x64 或 x86 的混合模式程序集(包含本机代码的程序集)具有特定的依赖关系。我有两个版本的依赖程序集,但我想知道如何最好地管理这个管理单元的构建和部署,特别是:
- 是否需要有两个版本的 snapin,一个 x86 和一个 x64,并使用两个不同版本的 installutil 来安装它,每个架构一次?
- 假设 #1 为真,是否建议在不同的“Program Files”和“Program Files (x86)”目录中安装两个不同版本的管理单元?
- 为了构建两个不同的架构,构建一对共享除单个引用之外的所有内容的项目的理想(最少麻烦)方法是什么?
- 如果管理单元编译为“AnyCpu”,并且依赖的 dll 都加载到 GAC 中,运行时是否会根据当前运行的 PowerShell 主机的体系结构从 GAC 加载正确的程序集?
- 是否有一种巧妙的方法可以在运行时动态选择要加载的依赖 dll(如果由于各种原因不能将其安装在 GAC 中),而不会遇到程序集加载上下文的问题?
math - 如何使用 32 位除法指令执行 64 位除法?
这是(AFAIK)这个一般主题中的一个特定问题。
情况如下:
我有一个基于 32 位 RISC 微控制器(NEC V810 的变体)的嵌入式系统(视频游戏机)。我想写一个定点数学库。我看了这篇文章,但是随附的源代码是用 386 汇编编写的,因此既不能直接使用也不能轻易修改。
V810 内置了整数乘除法,但我想使用上面文章中提到的 18.14 格式。这需要将 64 位整数除以 32 位整数,而 V810 仅执行(有符号或无符号)32 位/32 位除法(产生 32 位商和 32 位余数)。
所以,我的问题是:如何用 32 位/32 位除法模拟 64 位/32 位除法(以允许预移动被除数)?或者,从另一种方式来看问题,使用标准 32 位算术/逻辑运算将 18.14 定点除以另一个定点的最佳方法是什么?(“最佳”表示最快、最小或两者兼而有之)。
代数、(V810)汇编和伪代码都很好。我将从 C 调用代码。
提前致谢!
编辑:不知何故我错过了这个问题......但是,它仍然需要一些修改才能超级高效(它必须比 v810 提供的浮点 div 更快,尽管它可能已经是......),因此,请随时为我做我的工作以换取声誉积分;)(当然还有我的图书馆文档中的信用)。
c - 为什么 CPU 在字边界上访问内存?
我听说很多数据应该在内存中正确对齐以提高访问效率。CPU 在字边界上访问内存。
所以在下面的场景中,CPU 必须进行 2 次内存访问才能获得一个单词。
为什么会发生这种情况?CPU只能在字边界读取的根本原因是什么?
如果 CPU 只能访问 4 字节的字边界,地址线应该只需要 30 位,而不是 32 位宽度。因为在 CPU 的眼中,最后 2 位始终为 0。
加 1
更重要的是,如果我们承认 CPU 必须在字边界处读取,为什么边界不能从我想要读取的位置开始呢?似乎边界在 CPU 的眼中是固定的。
添加 2
根据AnT的说法,边界设置似乎是硬连线的,它是由内存访问硬件硬连线的。就这一点而言,CPU 是无辜的。
assembly - 一条汇编指令如何转化为 CPU 上的电压变化?
在过去的 3 到 5 年里,我一直在使用 C 和 CPython。考虑一下我的知识基础。
如果我要对支持它的处理器使用汇编指令,MOV AL, 61h
那么处理器内部究竟是什么来解释这段代码并将其作为电压信号发送?这么简单的指令怎么可能执行?
当我尝试考虑包含在MOV AL, 61h
甚至XOR EAX, EBX
.
编辑:我读了一些评论,问为什么当 x86 系列在嵌入式系统中不常见时我把它作为嵌入式。欢迎来到我自己的无知。现在我想,如果我对此一无所知,那么可能还有其他人对此一无所知。
考虑到你们都为答案付出的努力,我很难选择一个最喜欢的答案,但我觉得有必要做出决定。没有受伤的感觉,伙计们。
我经常发现,我对计算机了解得越多,我意识到自己真正了解的就越少。感谢您让我对微码和晶体管逻辑敞开心扉!
编辑#2:感谢这个线程,我刚刚理解了为什么XOR EAX, EAX
比MOV EAX, 0h
. :)
multithreading - 在 CPU 中运行多线程
我们都知道 JVM 在基于单个 CPU 的机器上调度用户线程。为什么单个 CP 不能并行运行多个进程/线程,什么是约束阻止了该功能
Also JVM is like a another software which is running in any machine,There may be thousands of other programs may waiting for the CPU cycle at a given time between this how JVM threads get the schedules from the CPU What is the parameter which gives the speed/possibility of the allocation of cycles for any process in any machine.
algorithm - CPU使用率是如何计算的?
在我的桌面上,我有一个小部件可以告诉我当前的 CPU 使用率。它还显示了我的两个核心中的每一个的使用情况。
我一直想知道,CPU 是如何计算出它使用了多少处理能力的?此外,如果 CPU 在进行一些密集计算时挂起,它(或处理此活动的任何东西)如何检查使用情况而不会被挂起?
iphone - armv6和i386有什么区别?
我正在尝试将 libssh2.dylib(由 Matthew Wilkinson 使用来自http://www.libssh2.org的 libssh2 库编译的第 3 方库)链接到我的 xcode 项目,但是当我尝试以下代码时:
这是我得到的错误:
当我尝试任何 libssh2 API 时出现此错误。任何人有任何线索的问题是什么?这些是我链接到项目的文件:
我还将 libssh2.dylib 文件链接到框架,并将构建选项卡上的“搜索头文件”的递归路径添加到文件 libssh2.a、libgcrypt.a、libgpg-error.a。
operating-system - 32 位与 64 位操作系统和处理器(英特尔架构和 Windows)有什么区别
我知道的唯一区别是 64 位和 32 位处理器的寄存器大小分别为 64 位和 32 位。在 64 位处理器中,地址也是 64 位的。这两者之间还有其他区别吗?