low-level相关内容

每个程序分配一个固定的堆栈大小?谁为每个运行的应用程序定义堆栈内存量?

当我们运行代码时,编译后的编译器会检测所需的堆栈内存量吗?因此,每个程序都有自己的堆栈内存。 还是每个程序的堆栈内存由操作系统定义? 谁为每个运行的应用程序定义堆栈内存量? 或者我们没有此功能,并且每个程序都可以根据需要使用所有堆栈内存? 推荐答案 在x86-64Linux上,堆栈默认分配8MB。点击此处浏览Ciro Santilli对x86 Linux内存布局的回答 ..
发布时间:2022-07-24 19:04:11 其他开发

为什么内存重新排序在单核/处理器机器上不是问题?

考虑以下取自 Wikipedia 的示例,稍作修改,其中程序的步骤对应于各个处理器指令: x = 0;f = 0;线程#1:而(f == 0);打印 x;线程#2:x = 42;f = 1; 我知道,由于无序执行,当线程在两个不同的物理内核/处理器上运行时,print 语句可能会打印不同的值(42 或 0). 但是我不明白为什么这在单核机器上不是问题,因为这两个线程在同一个核心上运行(通 ..

栈里面有什么?

如果我运行一个程序,就像 #include int main(int argc, char *argv[], char *env[]) {printf("我的引用在 %p, %p, %p\n", &argc, &argv, &env);} 我们可以看到这些区域实际上在堆栈中.但还有什么?如果我们循环遍历 Linux 3.5.3 中的所有值(例如,直到 segfault),我们 ..
发布时间:2022-01-22 12:56:31 其他开发

您会使用 num%2 还是 num&1 来检查一个数字是否为偶数?

好吧,至少有两种低级方法可以确定给定数字是否为偶数: 1. if (num%2 == 0) {/* even */}2. if ((num&1) == 0) {/* 偶数 */} 我认为第二种选择更加优雅和有意义,这是我经常使用的一种.但这不仅仅是品味问题.实际性能可能会有所不同:通常按位运算(例如这里的逻辑与)比 mod(或 div)运算效率更高.当然,你可能会争辩说有些编译器无论如何都可 ..
发布时间:2022-01-17 09:48:05 C/C++开发

来自 Windows 的低级键盘输入

哪些 win32 调用可用于从 Windows 服务全局检测按键事件(不仅针对 1 个窗口,我希望每次按下按键时都收到一条消息)? 解决方案 你想使用 Win32 Hooks.特别是键盘钩子. 你可以阅读更多关于这里 你想要的钩子类型是 WH_KEYBOARD,你可以通过 Win32 API SetWindowsHookEx 设置它. 基本上,每次在任何应用程序系统范围内 ..
发布时间:2022-01-13 23:05:19 其他开发

为什么每当我尝试使用中断时,我的 masm32 程序就会崩溃?

代码如下: .386 ; 最大兼容性的目标.model small,stdcall ;model.代码主要的:整数 20 小时结束主 结果:http://img705.imageshack.us/img705/3738/resultom.png “test.exe 已停止工作" - 到达中断时始终正确. 这是我尝试使用的中断.它应该只需退出程序.我尝试过的其他方法包括字符输入/输出 ..
发布时间:2022-01-12 11:34:45 其他开发

GUI是如何真正制作的?

我的问题是 像 Qt 这样的 Gui 库,可以说用于 Windows 操作系统他们如何创建所有这些图形用户界面(Windows 等). 每个操作系统是否提供 API 或其他东西来这样做?如果是,那么操作系统如何绘制所有这些窗口和东西.它们(操作系统)是否“控制"屏幕,然后逐个绘制每个像素以GUI 达到目的了吗? 我想要一个能在最低水平上解释事情的答案,但是我不要求有人给我写所有发生的 ..
发布时间:2022-01-11 23:11:49 其他开发

什么是 INT 21 小时?

受这个问题的启发 如何强制 GDB 反汇编? 我想知道 INT 21h 作为一个概念.现在,我对内部结构有了一些非常生疏的知识,但没有那么多细节.我记得在 C64 中有常规中断和不可屏蔽中断,但我的知识到此为止.你能给我一些线索吗?是 DOS 相关的策略吗? 解决方案 来自 这里:用于各种功能的多用途 DOS 中断,包括读取键盘和写入控制台和打印机.它还用于使用早期的文件控制块 ..
发布时间:2022-01-11 23:01:56 其他开发

什么是“内部地址"?在爪哇?

在 Object.hashCode() 说明 在合理可行的范围内,Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数.(这通常是通过将对象的内部地址转换为整数来实现的,但 Java™ 编程语言不需要这种实现技术.) 这是一个常见的误解,这与内存地址有关,但它不会在没有通知的情况下更改,并且 hashCode() 不会也不得更改对象. @Neet 提供了一 ..
发布时间:2021-12-21 09:57:57 Java开发

调用堆栈究竟是如何工作的?

我试图更深入地了解编程语言的低级操作是如何工作的,尤其是它们如何与 OS/CPU 交互.我可能已经阅读了 Stack Overflow 上每个堆栈/堆相关线程中的每个答案,它们都很出色.但是还有一件事我还没有完全理解. 在伪代码中考虑这个函数,它往往是有效的 Rust 代码;-) fn foo() {让 a = 1;让 b = 2;让 c = 3;让 d = 4;//第 X 行做某事(a, ..
发布时间:2021-12-18 09:01:51 其他开发

使用位移位除以 10?

是否可以使用纯位移、加法、减法和也许乘法将一个无符号整数除以 10?使用资源非常有限且划分缓慢的处理器. 解决方案 编者注:这实际上不是编译器所做的,对于以 9 结尾的大正整数,以 div10(1073741829) = 107374183 开头,给出错误答案107374182.不过,它对于较小的输入是准确的,但对于某些用途来说可能就足够了. 编译器(包括 MSVC)确实对常数除数使 ..
发布时间:2021-12-17 14:31:34 其他开发

为什么位字节序是位域中的一个问题?

任何使用位域的可移植代码似乎都能区分小端和大端平台.有关此类代码的示例,请参见 linux 内核中 struct iphdr 的声明.我不明白为什么位字节序是一个问题. 据我所知,位域纯粹是编译器构造,用于促进位级操作. 例如,考虑以下位域:struct ParsedInt {无符号整数 f1:1;无符号整数 f2:3;无符号整数 f3:4;};uint8_t i;struct Par ..
发布时间:2021-12-01 23:55:57 其他开发

3D 数组如何存储在 C 中?

我知道 C 中的数组是按行优先顺序分配的.因此,对于 2 x 3 数组: 0 12 34 5 在内存中存储为 0 1 2 3 4 5 但是,如果我有一个 2 x 3 x 2 数组会怎样: 0 12 34 5 和 6 78 910 11 这些是如何存储在内存中的?只是连续的喜欢: 0 1 2 3 4 5 6 7 8 9 10 11 或者是其他方式?还是取决于什么? 解决方案 ..
发布时间:2021-11-18 02:24:59 其他开发

如何在 WinMobile6 上启用 ARMv6 未对齐访问?

ARMv6 引入了一个很棒的功能 - 未对齐的内存访问,它使代码中的某些内容更加简单和快速.但是微软只在winCE6中为其提供了API.并且大多数 PDA 现在基于 WinMobile6(基于 CE 5.x).默认情况下禁用未对齐的访问:( 我尝试在 CP15 寄存器中设置未对齐标志,但这不起作用 - 我在读取未对齐数据时崩溃. 是否可以在 WinMobile6 上启用非对齐访问? ..
发布时间:2021-11-17 22:22:35 其他开发

如何在树莓派上运行没有操作系统的 C 程序?

我想尝试将 Raspberry Pi 用于一些不同的低级嵌入式应用程序.唯一的问题是,与可用的 AVR 和 PIC 微控制器板不同,Raspberry Pi 通常运行一个操作系统(如 Raspbian),该操作系统将 CPU 时间分配给所有正在运行的程序,这使得它对某些实时应用程序不切实际. 我最近了解到,假设您安装了像 GRUB 这样的引导程序,在 x86 上运行 C 程序 (以内核的形式 ..
发布时间:2021-11-17 21:45:01 其他开发

为 EEPROM 实现小文件系统是否值得

我买了一个 I2C EEPROM.我想存储传感器和电压数据.我假设该值可以大于一个字节,并且可以有很多数据.在这种情况下实现具有小文件分配表的文件系统是否值得?例如,这会让我更容易窥视 EEPROM. 解决方案 我发现 EEPROM 上的 FAT 有两个原因 如果需要具有不同文件的灵活性.如用于数据记录或配置.它允许多个这样的配置/日志文件,在将来是独立的并且很容易添加.这可能是未来 ..
发布时间:2021-11-17 03:45:13 其他开发

使用 AVX2 将 2 个 32 位数字相乘并取前 32 位

我使用乘法(加上其他运算)作为整数除法的替代.我的解决方案最终要求我将 2 个 32 位数字相乘并取前 32 位(就像 mulhi 函数一样),但 AVX2 不提供 _mm256_mulhi_epu16 的 32 位变体(例如:没有 '_mm256_mulhi_epu32' 函数). 我尝试了各种方法,例如检查AVX512的功能,甚至将32位整数操纵为2 hi/lo 16位整数.我对使用低级 ..
发布时间:2021-09-29 19:41:03 其他开发

WinDbg - 将字符串参数与内存中的字符串进行比较

我需要将作为参数传递给 WinDbg 的字符串与内存中的字符串进行比较.如何实现? 例如,字符串位于加载的 PE 内的特定偏移量中.因此,我可以通过执行 da/c 100 轻松读取字符串.但是,我如何使用这个字符串,在 WinDbg 脚本中使用 .if 将它与 arg1 进行比较?(和 $SPAT(),我猜) 我试图将 da 命令的输出读入别名或用户定义的寄存器,但没有成功. 解 ..
发布时间:2021-09-25 19:31:40 其他开发

低级钩子/SetWindowsHookEx lParam 自动重复?

在这里阅读:键盘如何自动-在 Windows PC 上重复实现? 我知道低级键盘钩子不接收自动重复计数:/ 注意低级键盘钩子(WH_KEYBOARD_LL)没有接收重复计数. 但是为什么??o.O 我过去使用 Windows 消息提取自动重复计数的方式: int repeatCount = (lParam & KF_REPEAT); 但是当我使用 SetWindow ..
发布时间:2021-09-25 19:23:32 C/C++开发

低级 C - 逐像素显示文本

我正在做一个小项目,我必须在其中编写一个低级应用程序.我想在该应用程序中显示文本,我什至希望它具有抗锯齿功能(à la ClearType).不允许使用库,我必须逐个像素地绘制每个字符. 这样做的最佳方法是什么?你能推荐一些已知的算法吗?我应该如何存储/读取字体? 谢谢! 解决方案 您是说只想平滑现有位图字体的边缘?如果您的原始字体是 16x32 并且您想以 8x16 或类似的 ..
发布时间:2021-09-06 19:08:00 其他开发