128得票7回答
调用栈是如何工作的?

我正在努力加深对编程语言低级操作的理解,特别是它们如何与操作系统/CPU交互。我可能已经阅读了Stack Overflow上所有堆栈/堆相关线程中的每个答案,它们都很出色。但仍有一件事情我还没有完全明白。 考虑下面这个伪代码函数,它往往是有效的Rust代码 ;-)fn foo() { ...

111得票3回答
为什么向量化通常比循环更快?

为什么在最低层的硬件执行操作和通用底层操作(即:所有编程语言实际运行代码时通用的事物)中,矢量化通常比循环快得多? 在循环时,计算机做了什么,而在使用矢量化时它不做什么(我指的是计算机执行的实际计算,而不是程序员编写的内容),或者它做了哪些不同的事情? 我一直无法说服自己为什么差异应该如此...

94得票10回答
如何在C ++类内存结构中创建"spacer"?

问题 在一个低级别的裸机嵌入式环境中,我希望创建一个C++结构体中没有名称的空白内存,以禁止用户访问该内存位置。 目前,我通过放置一个丑陋的uint32_t :96;位域来实现,它将方便地占据三个字的空间,但这会引起GCC的警告(位域过大而无法适应uint32_t),这是非常合理的。 虽...

89得票30回答
你为什么要使用汇编语言进行编程?

我有一个问题想问所有热衷于低级黑客技术的人。我在一篇博客中看到了这句话。我认为源并不重要(如果你真的在意,它是Haack),因为这似乎是一个常见的说法。 例如,许多现代三维游戏都使用C++和汇编语言编写其高性能核心引擎。 至于汇编代码-是因为您不希望编译器发出额外的指令或使用过多的...

86得票9回答
x<<1和x<<10哪个更快?

我绝对不想优化任何东西,我只是出于好奇想问这个问题。我知道在大多数硬件上都有一个位移的汇编指令(例如 shl, shr),这是一个单独的指令。但是,无论你移动多少位,它是否会影响性能(以纳秒或 CPU 指令为单位)?换句话说,在任何 CPU 上,以下哪种方法更快?x &lt;&lt; 1; 并...

77得票7回答
为什么位序对于位域是一个问题?

任何使用位域的可移植代码似乎都区分大小端平台。以Linux内核中struct iphdr的声明为例,可以看到这样的代码。我不明白位元顺序为什么成为问题。 据我所知,位域是纯粹的编译器构造,用于便捷的位级操作。 例如,考虑以下位域: struct ParsedInt { unsig...

71得票5回答
学习汇编语言 - 我应该从32位还是64位开始?

我很想学习汇编语言。我在c/c++方面表现得相当不错,但希望更好地理解低级别操作。 我知道以前已经提出过与汇编有关的问题,但我只是在寻找一些特定于我的情况的指导: 我正在运行Windows 7,并对如何开始使用汇编语言感到困惑。因为我正在运行Windows 7,我必须从x64开始吗?有些人...

61得票10回答
使用位移操作实现除以10?

使用纯位移、加法、减法和可能乘法,可以将无符号整数除以10吗? 使用资源非常有限且除法速度慢的处理器。

48得票25回答
操作系统是如何“制作”的?

创建一个操作系统似乎是一个庞大的项目。那么,任何人如何开始呢?例如,当我将Ubuntu放入驱动器中时,我的计算机如何运行它?(我想这真的是我最想知道的)。或者,从另一个角度来看,仅有多少字节的磁盘才能作为“运行”作为操作系统?对不起,如果这很模糊。我对这个主题一无所知,所以我不能非常具体。我假...

43得票4回答
如何在树莓派上运行没有操作系统的C程序?

我想尝试使用树莓派进行一些不同的低级嵌入式应用程序的实验。唯一的问题是,与可用的AVR和PIC微控制器板不同,树莓派通常运行一个操作系统(如Raspbian),该操作系统在所有运行的程序之间分配CPU时间,并使得对某些实时应用程序不切实际。 我最近了解到,假设您已经安装了像GRUB这样的引导...