问题标签 [low-level]
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.
linux - Linux 中的上下文切换需要多长时间?
我很好奇在 Linux 中改变上下文需要多少个周期。我专门使用 E5405 Xeon (x64),但我也很想看看它与其他平台的比较。
variables - 如何访问堆栈上的变量?
假设我们有这些局部变量:
据我所知,这些将分配在系统堆栈上,如下所示:
这是否意味着为了得到a的值,必须首先将d、c和b的值从堆栈中弹出?如果是这样,这些值在哪里?这是否意味着访问最近声明的变量会更快?还是我错过了什么(我怀疑是这种情况),而整个事情以其他方式起作用?
编辑:谢谢,伙计们!
windows - 在受控环境下运行应用程序的问题 (Win32)
我不确定如何标记这个问题或如何写标题,所以如果有人有更好的主意,请编辑它
这是交易:
前段时间,我编写了一个计算奥赛管理系统的一个小而关键的部分。系统的工作是获取参与者的提交(代码文件),编译它们,针对预定义的测试用例运行它们,并返回结果。加上你能想象到的所有其他事情。
我写的那部分叫做Limiter。这是一个小程序,它的工作是获取另一个程序并在受控环境中运行它。在这种情况下,受控意味着对可用内存、计算时间和对系统资源的访问的限制。另外,如果程序崩溃,我应该能够确定异常的类型并将其报告给用户。此外,当进程终止时,应注意它执行了多长时间(分辨率至少为 0.01 秒,最好更多)。
当然,最理想的解决方案是虚拟化,但我没有这么写的经验。
我对此的解决方案分为三个部分。
最简单的部分是对系统资源的访问。该程序将简单地使用有限的访问令牌执行。我结合了一些可用于所有进程的基本(每个人、匿名等)访问令牌,以便实际上提供对系统的只读访问,但它正在执行的文件夹除外。
内存限制是通过作业对象完成的——它们允许指定最大内存限制。
最后,为了限制执行时间并捕获所有异常,我的限制器作为调试器附加到进程。因此,我可以监控它花费的时间,如果花费的时间太长,我可以终止它。请注意,我不能为此使用 Job 对象,因为它们只报告作业的内核时间和用户时间。一个进程可能会做一些Sleep(99999999)
不会计算在内的事情,但仍然会禁用测试机器。因此,虽然我没有将进程空闲时间计入其最终执行时间,但它仍然必须有一个限制。
现在,我不是这种低级事物的专家。我花了几天时间阅读 MSDN 并玩弄,并尽我所能想出了一个解决方案。不幸的是,它似乎没有像预期的那样运行。在大多数情况下,它似乎工作正常,但奇怪的情况不断出现。刚才我有一个小 C++ 程序,它自己在瞬间运行,但我的限制器报告了 8 秒的用户模式时间(取自作业计数器)。这是代码。它在大约半秒内打印输出,然后花费超过 7 秒的时间等待:
限制器的代码很长,所以我不在这里包括它。我也觉得我的方法可能有问题——也许我不应该做调试器的事情。也许有一些我不知道的常见陷阱。
我想要一些关于其他人如何解决这个问题的建议。也许已经有一些东西可以做到这一点,而我的限制器已经过时了?
补充:问题似乎出在我上面贴的那个小程序上。我为它提出了一个新问题,因为它有些无关。我仍然想对这种限制程序的方法发表评论。
c - 用于 C 语言的低级、网络相关软件的读物、工具和库
我即将毕业,电子和 tlc 工程,我有一些不错的 PHP 和 Java OO 编程经验。
现在我想尝试以 C 程序员的身份开始职业生涯。
我对 C 很感兴趣,因为我认为这是最适合开发设备驱动程序、固件和其他低级软件的语言,而不考虑汇编语言。特别是我希望能够从事与网络相关的主题。我想在硬件附近工作,因为我认为这是我能够在获得学位的同时获得作为程序员的满足感的唯一途径。
所以我想问一下你认为我应该读什么,因为我已经可以用 C 写一些东西了,虽然没有什么花哨的,而且我已经读了几次 K&R。
如果您知道任何工具或库(如 libevent 和 libev),它们是低级、网络相关、C 编程领域的事实上的标准,也很高兴知道。
c++ - 编译器编程:最基本的成分是什么?
我有兴趣编写一个非常简约的编译器。
我想编写一个满足以下条件的小软件(在 C/C++ 中):
- 以 ELF 格式输出 (*nix)
- 输入是单个文本文件
- 类 C 语法和句法
- 没有链接器
- 没有预处理器
- 非常小(最多 1-2 KLOC)
语言特点:
- 本机数据类型:char、int 和 floats
- 数组(适用于所有本机数据类型)
- 变量
- 控制结构(if-else)
- 职能
- 循环(会很好)
- 简单代数(div、add、sub、mul、布尔表达式、位移等)
- 内联汇编(用于系统调用)
谁能告诉我如何开始?我不知道编译器由哪些部分组成(至少在我可以立即开始的意义上)以及如何对它们进行编程。谢谢你的想法。
accessibility - 视障人士如何处理启动失败和其他低级环境
我知道屏幕阅读器和类似软件的存在是为了帮助盲人和视障者在 Windows 或其他操作系统中使用计算机。
我很好奇在 OS 安装程序和 BIOS 设置等较低级别的环境中提供哪些支持。
low-level - 可以使用寄存器的增量来确定时钟速率吗?
可以使用寄存器的增量(在循环中)来确定(有效)时钟速率吗?我很自然地认为它可以,但有人评论说 Cpu 可能会植入超标量技术,使这种计算变得无用。另外有人告诉我,CPU 上的寄存器的递增可以在不到一个时钟周期内完成。
是真的吗?
programming-languages - 您可以推荐哪些快速的低级语言?
我对用于性能计算的类 C 语言产生了兴趣。您能否推荐一些具有以下属性的替代编程语言:
- 必须靠近硬件(位摆弄、指针或一些替代的安全方法,如引用)
- 没有托管代码(没有 jvm/.net 语言)
- 必须非常快(如C)
- 必须高于 ASM 级别(是的,我对 ASM 之上的宏语言感兴趣)
- 可能晦涩难懂,不是很普遍
我主要对鲜为人知的语言感兴趣。
mips - 学习 MIPS 作为第二种汇编语言?
我知道 x86 汇编(并且使用过 FPGA 等),从未为 RISC 写过文章,我有机会参加 MIPS 课程,但我现在很忙,所以我的问题是,我知道每一件事我知道在某种程度上是有益的,但实际上,有多少有益?(我是低级热心,但这是必须的吗?)
(我知道mips-is-it-important,但我觉得我的情况略有不同,因为我已经知道某种组装)
谢谢。
memory - 低级编程:如何在另一个正在运行的进程的内存中查找数据?
我正在尝试通过从游戏的进程内存中提取值来为游戏编写统计工具(因为没有其他方法)。最大的挑战是找出存储我感兴趣的数据所需的地址。更难的是动态内存分配——我不仅需要找到存储数据的地址,还需要找到指向这些内存块的指针,因为每次游戏重新启动时地址都会发生变化。
现在我只是使用内存编辑器(ArtMoney)手动搜索游戏内存,并寻找随着数据变化(或不变化)而改变其值的地址。找到地址后,我正在寻找一个以类似方式指向该内存块的指针。
我想知道这些任务有哪些技术/工具?也许有一些我可以阅读的文章?掌握反汇编程序是唯一的出路吗?例如,游戏培训师正在解决类似的任务,但他们在几天内就完成了,而我已经苦苦挣扎了好几个星期。
谢谢。
PS。一切都在窗户下。