low-level相关内容
当我们运行代码时,编译后的编译器会检测所需的堆栈内存量吗?因此,每个程序都有自己的堆栈内存。 还是每个程序的堆栈内存由操作系统定义? 谁为每个运行的应用程序定义堆栈内存量? 或者我们没有此功能,并且每个程序都可以根据需要使用所有堆栈内存? 推荐答案 在x86-64Linux上,堆栈默认分配8MB。点击此处浏览Ciro Santilli对x86 Linux内存布局的回答
..
考虑以下取自 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),我们
..
好吧,至少有两种低级方法可以确定给定数字是否为偶数: 1. if (num%2 == 0) {/* even */}2. if ((num&1) == 0) {/* 偶数 */} 我认为第二种选择更加优雅和有意义,这是我经常使用的一种.但这不仅仅是品味问题.实际性能可能会有所不同:通常按位运算(例如这里的逻辑与)比 mod(或 div)运算效率更高.当然,你可能会争辩说有些编译器无论如何都可
..
哪些 win32 调用可用于从 Windows 服务全局检测按键事件(不仅针对 1 个窗口,我希望每次按下按键时都收到一条消息)? 解决方案 你想使用 Win32 Hooks.特别是键盘钩子. 你可以阅读更多关于这里 你想要的钩子类型是 WH_KEYBOARD,你可以通过 Win32 API SetWindowsHookEx 设置它. 基本上,每次在任何应用程序系统范围内
..
代码如下: .386 ; 最大兼容性的目标.model small,stdcall ;model.代码主要的:整数 20 小时结束主 结果:http://img705.imageshack.us/img705/3738/resultom.png “test.exe 已停止工作" - 到达中断时始终正确. 这是我尝试使用的中断.它应该只需退出程序.我尝试过的其他方法包括字符输入/输出
..
我的问题是 像 Qt 这样的 Gui 库,可以说用于 Windows 操作系统他们如何创建所有这些图形用户界面(Windows 等). 每个操作系统是否提供 API 或其他东西来这样做?如果是,那么操作系统如何绘制所有这些窗口和东西.它们(操作系统)是否“控制"屏幕,然后逐个绘制每个像素以GUI 达到目的了吗? 我想要一个能在最低水平上解释事情的答案,但是我不要求有人给我写所有发生的
..
受这个问题的启发 如何强制 GDB 反汇编? 我想知道 INT 21h 作为一个概念.现在,我对内部结构有了一些非常生疏的知识,但没有那么多细节.我记得在 C64 中有常规中断和不可屏蔽中断,但我的知识到此为止.你能给我一些线索吗?是 DOS 相关的策略吗? 解决方案 来自 这里:用于各种功能的多用途 DOS 中断,包括读取键盘和写入控制台和打印机.它还用于使用早期的文件控制块
..
在 Object.hashCode() 说明 在合理可行的范围内,Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数.(这通常是通过将对象的内部地址转换为整数来实现的,但 Java™ 编程语言不需要这种实现技术.) 这是一个常见的误解,这与内存地址有关,但它不会在没有通知的情况下更改,并且 hashCode() 不会也不得更改对象. @Neet 提供了一
..
我试图更深入地了解编程语言的低级操作是如何工作的,尤其是它们如何与 OS/CPU 交互.我可能已经阅读了 Stack Overflow 上每个堆栈/堆相关线程中的每个答案,它们都很出色.但是还有一件事我还没有完全理解. 在伪代码中考虑这个函数,它往往是有效的 Rust 代码;-) fn foo() {让 a = 1;让 b = 2;让 c = 3;让 d = 4;//第 X 行做某事(a,
..
是否可以使用纯位移、加法、减法和也许乘法将一个无符号整数除以 10?使用资源非常有限且划分缓慢的处理器. 解决方案 编者注:这实际上不是编译器所做的,对于以 9 结尾的大正整数,以 div10(1073741829) = 107374183 开头,给出错误答案107374182.不过,它对于较小的输入是准确的,但对于某些用途来说可能就足够了. 编译器(包括 MSVC)确实对常数除数使
..
任何使用位域的可移植代码似乎都能区分小端和大端平台.有关此类代码的示例,请参见 linux 内核中 struct iphdr 的声明.我不明白为什么位字节序是一个问题. 据我所知,位域纯粹是编译器构造,用于促进位级操作. 例如,考虑以下位域:struct ParsedInt {无符号整数 f1:1;无符号整数 f2:3;无符号整数 f3:4;};uint8_t i;struct Par
..
我知道 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 或者是其他方式?还是取决于什么? 解决方案
..
ARMv6 引入了一个很棒的功能 - 未对齐的内存访问,它使代码中的某些内容更加简单和快速.但是微软只在winCE6中为其提供了API.并且大多数 PDA 现在基于 WinMobile6(基于 CE 5.x).默认情况下禁用未对齐的访问:( 我尝试在 CP15 寄存器中设置未对齐标志,但这不起作用 - 我在读取未对齐数据时崩溃. 是否可以在 WinMobile6 上启用非对齐访问?
..
我想尝试将 Raspberry Pi 用于一些不同的低级嵌入式应用程序.唯一的问题是,与可用的 AVR 和 PIC 微控制器板不同,Raspberry Pi 通常运行一个操作系统(如 Raspbian),该操作系统将 CPU 时间分配给所有正在运行的程序,这使得它对某些实时应用程序不切实际. 我最近了解到,假设您安装了像 GRUB 这样的引导程序,在 x86 上运行 C 程序 (以内核的形式
..
我买了一个 I2C EEPROM.我想存储传感器和电压数据.我假设该值可以大于一个字节,并且可以有很多数据.在这种情况下实现具有小文件分配表的文件系统是否值得?例如,这会让我更容易窥视 EEPROM. 解决方案 我发现 EEPROM 上的 FAT 有两个原因 如果需要具有不同文件的灵活性.如用于数据记录或配置.它允许多个这样的配置/日志文件,在将来是独立的并且很容易添加.这可能是未来
..
我使用乘法(加上其他运算)作为整数除法的替代.我的解决方案最终要求我将 2 个 32 位数字相乘并取前 32 位(就像 mulhi 函数一样),但 AVX2 不提供 _mm256_mulhi_epu16 的 32 位变体(例如:没有 '_mm256_mulhi_epu32' 函数). 我尝试了各种方法,例如检查AVX512的功能,甚至将32位整数操纵为2 hi/lo 16位整数.我对使用低级
..
我需要将作为参数传递给 WinDbg 的字符串与内存中的字符串进行比较.如何实现? 例如,字符串位于加载的 PE 内的特定偏移量中.因此,我可以通过执行 da/c 100 轻松读取字符串.但是,我如何使用这个字符串,在 WinDbg 脚本中使用 .if 将它与 arg1 进行比较?(和 $SPAT(),我猜) 我试图将 da 命令的输出读入别名或用户定义的寄存器,但没有成功. 解
..
在这里阅读:键盘如何自动-在 Windows PC 上重复实现? 我知道低级键盘钩子不接收自动重复计数:/ 注意低级键盘钩子(WH_KEYBOARD_LL)没有接收重复计数. 但是为什么??o.O 我过去使用 Windows 消息提取自动重复计数的方式: int repeatCount = (lParam & KF_REPEAT); 但是当我使用 SetWindow
..
我正在做一个小项目,我必须在其中编写一个低级应用程序.我想在该应用程序中显示文本,我什至希望它具有抗锯齿功能(à la ClearType).不允许使用库,我必须逐个像素地绘制每个字符. 这样做的最佳方法是什么?你能推荐一些已知的算法吗?我应该如何存储/读取字体? 谢谢! 解决方案 您是说只想平滑现有位图字体的边缘?如果您的原始字体是 16x32 并且您想以 8x16 或类似的
..