问题标签 [x86]
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 - 是否可以在 Linux 上预测 C 中的堆栈溢出?
在 x86 Linux 系统上,某些情况可能会导致堆栈溢出:
struct my_big_object[HUGE_NUMBER]
在堆栈上。穿过它最终会导致SIGSEGV
。- 该
alloca()
例程(如malloc()
,但使用堆栈,自动释放自身,SIGSEGV
如果它太大也会爆炸)。更新: alloca() 并没有像我最初所说的那样被正式弃用;它只是气馁。
有没有办法以编程方式检测本地堆栈对于给定对象是否足够大?我知道堆栈大小可以通过 调整ulimit
,所以我希望有一种方法(但它可能是不可移植的)。理想情况下,我希望能够做这样的事情:
performance - 现代 CPU 到底有多“快”?
当我曾经对嵌入式系统和早期的 8/16 位 PC(6502、68K、8086)进行编程时,我对每条指令执行所需的时间(以纳秒或微秒为单位)有很好的把握。根据系列,一个(或四个)周期相当于一个“内存获取”,并且无需担心缓存,您可以根据所涉及的内存访问次数猜测时间。
但是对于现代CPU,我很困惑。我知道它们要快得多,但我也知道如果不知道每条指令需要多少个时钟周期,标题千兆赫的速度是没有帮助的。
因此,任何人都可以为(假设)2GHz Core 2 Duo 上的两个示例指令提供一些时间。最好和最坏的情况(假设缓存中没有任何内容/缓存中的所有内容)将很有用。
指令#1:将一个 32 位寄存器加到一秒。
指令 #2:将 32 位值从寄存器移动到内存。
编辑:我问这个的原因是尝试开发一个“经验法则”,它可以让我查看简单的代码并粗略地衡量最接近的数量级所花费的时间。
编辑#2:有很多有趣的答案,但没有人(还)写下一个及时测量的数字。我很欣赏这个问题有“复杂性”,但是来吧:如果我们可以估计NYC 的钢琴调音师的数量,我们应该能够估计代码运行时间......
采取以下(愚蠢的)代码:
我们如何估算运行... 1 飞秒需要多长时间?1 千兆年?
assembly - x86 最快的虚拟机设计是什么?
我将在 x86 中实现一个虚拟机,我想知道什么样的设计会产生最好的结果。我应该专注于什么来挤出果汁?我将在 x86 程序集中实现整个虚拟机。
我没有太多说明,我可以选择它们的形式。这些指令以块的形式直接投射到 smalltalk 的语法中。我给出了我正在考虑的指令设计:
我正在考虑的那种虚拟机:
不要开始问我为什么需要另一个虚拟机实现。解释性程序不是您在需要时才拿起的库存东西。您在其他地方提出的大多数虚拟机都以性能成本为重,注重可移植性。我的目标不是可移植性,我的目标是性能。
之所以需要这个解释器,是因为 smalltalk 块最终不会以同样的方式被解释:
我需要来自解释例程的真正好处,那就是选择在哪里读取程序的上下文。当然,好的编译器应该在大多数情况下编译明显的情况,例如:'ifTrue:ifFalse' 或 'whileTrue: ',或列表示例。对口译员的需求不仅会消失,因为您总是可能遇到无法确定该块得到您期望的治疗的情况。
c# - 在 64 位机器上以 32 位运行 C# 应用程序
如何强制我的应用程序在 64 位机器上以 32 位运行?
代码是用 C# 编写的。
assembly - 从 MIPS 切换到 x86 程序集时我应该知道什么?
在学校,我们用 MIPS 汇编语言编程已经有一段时间了。我有兴趣深入研究 x86 程序集,我听说这有点难(甚至我的 MIPS 教科书也这么说)。
作为一名 MIPS 程序员,在进入 x86 世界之前,我应该了解哪些核心信息?
c# - x64 上的 TypeLoadException 但在带有结构布局的 x86 上很好
如果您想查看实际的异常,您将需要一台 64 位机器。我创建了一些重现问题的虚拟类。
如果我在 64 clr 上运行它,我会收到一个类型加载异常,
如果我将目标 cpu 强制为 32,它工作正常。
此外,如果我将 InnerType 从类更改为结构,它也可以工作。有人可以解释发生了什么或我做错了什么吗?
谢谢
x86 - 开发新的指令集
英特尔将发布一个名为AVX的新指令集,其中包括将 SSE 扩展到 256 位操作。即,4 个双精度元素或 8 个单精度元素。
考虑到目前还没有支持它的硬件,如何为 AVX 开发代码?更一般地说,开发人员如何为不存在的硬件编写代码,例如,如果他们希望在支持 CPU 发布时准备好软件?
linux - 如何在 x86 linux 上执行 MIPS 汇编程序?
为了运行 MIPS 汇编程序,是否有任何用于 x86 linux 的命令行解释器或任何其他程序集?
我希望能够编写简单的 MIPS 汇编程序并从本地机器上的控制台运行它们。
我知道 SPIM,但它需要 X Windows,我很好奇是否有更好的选择。
编辑:原来它不需要 X Windows。我仍然有 SPIM 的问题。在我的拙见中不是最好的。Qemu / 交叉编译的工具链需要更多的工作,但我的怪癖更少。
assembly - x86: ZF 不总是由 AND 更新?
我正在 x86 上调试我的代码,如果结果不为零,则问题可以追溯到 AND 指令有时不会清除 ZF 标志。这是有问题的代码段:
我在 AND 之后添加了一个断点进行调试。当它在断点 EDX==0x80000 和 ZF==1 处停止时。但是如果 EDX!=0,ZF 应该被清除。该代码在调试器中单步运行时运行良好,但在正常运行期间始终失败。
这是调试器会话的屏幕截图。
有什么提示吗?
如果这很重要,代码是由 JIT 生成的,所以我正在执行数据。
先感谢您。
sql-server - Sql Server x64 和 x86 链接服务器
我有一个需要从 Sql Server 访问的 Visual FoxPro 表。在 Sql Server x86 中,我将只创建一个链接服务器。不幸的是,没有用于 VFP 的 x64 驱动程序 - 因此 Sql Server x64 无法为其创建链接服务器。
到目前为止,我已经提出了以下选项——其中没有一个是我特别喜欢的:
- 设置一个 x86 Sql Server 用作中继,以便查询从 x64 -> x86 -> VFP。
我真的不关心这个,因为除了作为开发人员之外,我还是系统管理员。所以,这意味着我需要修补、维护和监控另一个 Sql Server - 可能还有另一个服务器(假设我不只是使用单独的实例)。
此外,由于 VFP 提供程序不能使用 4 部分语法,因此我必须使用 OPENQUERY。想到将 OPENQUERY 语句嵌入到另一个 OPENQUERY 语句中所需要的所有单引号转义让我头晕目眩……
- 创建一个 CLR 表值函数,尽管程序集(大概?)也是 x64 - 所以我必须退出 proc(IPC?Webservice?)才能实际运行查询
事实证明 TVF 需要一个模式,所以这个选项并不像我最初想象的那样干净。我做了一个峰值来让 WCF 客户端进入 MSSQL,它返回一个 XML 列,然后可以使用 Sql XML 数据类型函数对其进行解析。它可以工作,并且实际上比 OPENQUERY 更易于查询,因为它实际上将变量作为参数。这为我节省了大部分单引号和 EXEC 舞蹈。
当然,Sql 中的 WCF 完全不受支持,而且闻起来像是一个相当大的 hack。我对性能和可靠性有相当严重的保留。
- 停止从 Sql Server 到 VFP 的查询,并重写大量客户端代码
显然,这是“正确”的答案。但是,有很多客户端代码依赖于 Sql Server 表和 VFP 表之间的连接。重写这些东西以填充临时表或进行客户端连接似乎是一个相当大的负担。
这里希望有人能提出更好的选择,或一些类似的经验。