标签: low-level

C语言作为"低级"语言有多"低"?

我们经常听说C是一种低级语言,但它有多低?我所知道的最低级别是使用指针的内存管理.我还有更进一步的发现水平吗?"靠近硬件"是什么意思?"靠近硬件"的C怎么样?

c programming-languages low-level

23
推荐指数
3
解决办法
2万
查看次数

如何模拟从Mac App到其他应用程序的鼠标单击

我试图从macos App模拟鼠标点击iphone模拟器,因为我正在使用CGEvents.

iPhone模拟器的进程ID为33554

let point = CGPoint(x: 500  , y:300)
let eventMouseDown = CGEvent(mouseEventSource: nil, mouseType: .leftMouseDown, mouseCursorPosition: point, mouseButton: .left)
let eventMouseUp = CGEvent(mouseEventSource: nil, mouseType: .leftMouseUp, mouseCursorPosition: point, mouseButton: .left)
eventMouseDown?.postToPid(33554)
eventMouseUp?.postToPid(33554)
Run Code Online (Sandbox Code Playgroud)

我也注意到,当ios模拟器窗口被聚焦时它模拟鼠标点击并且仅适用于此工具栏但不适用于模拟器,例如,如果我将CGPoint更改为(0,30)它将单击模拟器选项

在此输入图像描述

但当我提供CGPoints点击iOS模拟器内的应用程序时它无法正常工作 在此输入图像描述

但是,我可以使用键盘事件发送到模拟器

let keyboardDown = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: true)
let keyboardUp = CGEvent(keyboardEventSource: nil, virtualKey: 6, keyDown: false)
keyboardDown?.postToPid(33554)
keyboardUp?.postToPid(33554)
Run Code Online (Sandbox Code Playgroud)

macos mouseevent low-level swift

21
推荐指数
2
解决办法
3091
查看次数

您会使用num%2或num&1来检查数字是否均匀?

那么,至少有两种低级方法可以确定给定的数字是否是偶数:

 1. if (num%2 == 0) { /* even */ } 
 2. if ((num&1) == 0) { /* even */ }
Run Code Online (Sandbox Code Playgroud)

我认为第二种选择更加优雅和有意义,而这正是我经常使用的选择.但这不仅仅是品味问题; 实际性能可能会有所不同:通常按位操作(例如logial和here)比mod(或div)操作更有效.当然,你可能会争辩说有些编译器无论如何都能优化它,我同意......但有些人不会.

另一点是,对于经验不足的程序员来说,第二个可能有点难以理解.关于这一点,我回答说,如果这些程序员花很短的时间来理解这种语句,它可能只会让每个人受益.

你怎么看?

只有当num无符号整数或具有二进制补码表示的负数时,给定的两个片段才是正确的. - 正如一些评论所说的那样.

c++ numbers readability bitwise-operators low-level

20
推荐指数
6
解决办法
2万
查看次数

x64汇编中的"影子空间"是什么?

我发现了很多关于这个影子空间的话题,但我找不到答案,所以我的问题是:

在进入程序之前,我需要从堆栈指针中减去多少字节?

我应该在减去"阴影空间"之前将过程参数推送到堆栈吗?

我已经拆解了我的代码,但我找不到逻辑.

c++ 64-bit assembly low-level

20
推荐指数
2
解决办法
7040
查看次数

哪种编程语言不被认为是高级的?

在信息学理论中,我一直听到并阅读有关高级和低级语言的知识.

但我不明白为什么这仍然相关,因为除了今天使用的汇编程序之外没有任何(相关的)低级语言.

所以你得到:

低级别

  • 汇编

绝对不是低级别的

  • C
  • BASIC
  • FORTRAN
  • COBOL
  • ...

高水平

  • C++
  • 红宝石
  • 蟒蛇
  • PHP
  • ...

如果汇编程序是低级别的,你怎么能把例如C放到同一个列表中.我的意思是:与汇编程序相比,C是非常高级的.即使对于COBOL,Fortran等也是如此.

  • 那么,如果汇编程序真的是唯一的低级语言,为什么每个人都不断提及高级和低级语言呢?

programming-languages low-level high-level

19
推荐指数
4
解决办法
3万
查看次数

C中的Haskell式系统

我想知道,是否有可能将haskell强大的类型系统集成到像C这样的语言中,并且仍能够进行高效的低级编程?

c haskell type-systems low-level type-safety

17
推荐指数
1
解决办法
1162
查看次数

低级库是如何制作的?

当我去制作C++应用程序时,我通常使用SDLWxWidgets等库.但是,如果我要创建一个库,我是否需要使用库来创建一个库?或者我可以用核心C++代码制作整个库,这甚至可能吗?

我的观点是,必须有一个点,一个库没有任何基础,所以它可以使用的唯一东西是核心C++.

我对这个理论是对的吗?如果没有,低级库是如何制作的?

(我知道这是一个广泛的问题,但我是一个非常好奇的人,需要答案,这是困扰我的事情.)

c++ low-level libraries

17
推荐指数
3
解决办法
4008
查看次数

Scala for LowLevel除了使用什么第二语言?

我对Scala非常满意,只是喜欢它:)

但有时我真的想要更低级别,没有JVM并使用"酷"CPU等功能,如SSE等.

那么除了Scala之外什么是第二语言呢?

它应该是:

  • 编译成机器代码
  • 易于使用C库
  • 可以编程非常接近硬件
  • 当我想要时,可以以非常高的方式编程

所以基本上我想要一个Scala,我可以在我想要的时候抛出内联汇编程序:)我认为,这样的语言不存在,但也许有一些接近.

那么什么是一个好的选择?C++?,D?,OCaml?

我用C++(15年前)编写了一些编程,而使用OCaml则编程很少.在这两种情况下,我只解决了一些问题,而且从来没有对语言本身进行过"深入".

programming-languages scala low-level

15
推荐指数
4
解决办法
2765
查看次数

如何减少默认的C++内存消耗?

我有一个用C++编写的服务器应用程序.启动后,它在x86 Linux上使用大约480 KB的内存(Ubuntu 8.04,GCC 4.2.4).我认为480 KB是一个过多的内存:服务器甚至没有做任何事情,没有客户端连接到服务器.(另请参阅下面的评论,其中我解释了为什么我认为480 KB是大量内存.)服务器在初始化期间唯一做的事情就是产生一个或两个线程,设置几个套接字,以及其他简单的东西.非常记忆密集.

请注意,我在谈论实际内存使用情况,而不是VM大小.我通过在空闲笔记本电脑上启动我的服务器的100个实例来测量它,并在启动服务器实例之前和之后用"免费"测量系统内存使用情况.我已经考虑了文件系统缓存和类似的东西.

经过一些测试后,看起来C++运行时中的某些东西会导致我的服务器使用这么多内存,即使服务器本身没有做任何事情.例如,如果我插入

getchar(); return 0;
Run Code Online (Sandbox Code Playgroud)

之后

int main(int argc, char *argv[]) {
Run Code Online (Sandbox Code Playgroud)

然后每个实例的内存使用量仍为410 KB!

我的应用程序仅依赖于Curl和Boost.我有很多C编程经验,我知道C库在使用之前不会增加内存消耗.

我发现的其他事情:

  • 一个简单的hello world C app消耗大约50 KB的内存.
  • 一个简单的hello world C app链接到Curl,但不使用Curl,也消耗大约50 KB的内存.
  • 一个简单的hello world C++应用程序(没有Boost)消耗大约100 KB的内存.
  • 一个简单的hello world C++应用程序包含一些Boost标头,但实际上并没有使用Boost,它消耗大约100 KB的内存.使用'nm'检查可执行文件时没有Boost符号.

我的结论如下:

  1. Gcc抛弃了未使用的Boost符号.
  2. 如果我的应用程序使用Boost,那么C++运行时(可能是动态链接器)中的某些内容会导致它使用大量内存.但是什么?我怎样才能知道这些东西是什么,我能对它们做些什么?

我记得几年前关于C++动态链接器问题的一些KDE讨论.之后的Linux C++动态链接器导致KDE C++应用程序启动时间慢,内存消耗大.据我所知,这些问题已在C++运行时修复.但类似的东西可能是我所看到的过度记忆消耗的原因吗?

来自gcc /动态链接专家的答案非常感谢.

对于那些好奇的人,有问题的服务器是Phusion Passenger的日志记录代理:https://github.com/FooBarWidget/passenger/blob/master/ext/common/LoggingAgent/Main.cpp

c++ memory-management elf dynamic-linking low-level

15
推荐指数
2
解决办法
2869
查看次数

功能是如何计算的?

我理解currying的概念是什么,并且知道如何使用它.这些不是我的问题,而是我很好奇这个实际上是如何在比Haskell代码更低的层次上实现的.

例如,当(+) 2 4curried时,是一个指向2维持的指针,直到4传入?甘道夫是否会缩短时空?这个魔法是什么?

haskell pointers functional-programming currying low-level

15
推荐指数
2
解决办法
312
查看次数