小编Bob*_*Bob的帖子

倒计时比倒数更快吗?

我们的计算机科学老师曾经说过,由于某些原因,倒计时比计数更有效率.例如,如果你需要使用FOR循环并且某个地方没有使用循环索引(比如在屏幕上打印一行N*),我的意思是这样的代码:

for (i = N; i >= 0; i--)  
  putchar('*');  
Run Code Online (Sandbox Code Playgroud)

比以下更好:

for (i = 0; i < N; i++)  
  putchar('*');  
Run Code Online (Sandbox Code Playgroud)

这是真的吗?如果是这样,有谁知道为什么?

c performance loops

130
推荐指数
7
解决办法
2万
查看次数

将c代码转换为x86程序集的简便方法?

是否有一种简单的方法(如免费程序)可以将c/c ++代码转换为x86程序集?

我知道任何c编译器都做了非常类似的事情,我可以编译c代码,然后反汇编编译的可执行文件,但这有点过分,我想要的只是转换几行代码.

有谁知道一些可以做到这一点的程序?

编辑:我知道GCC编译器这样做,但它是AT&T语法,我正在寻找英特尔语法(不确定它是否称为英特尔语法).AT&T语法对我来说有点像胡言乱语,有些命令以相反的顺序使用操作数,而不是我习惯的方式,它可能会让人感到困惑.

c compiler-construction x86 assembly programming-languages

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

设置寄存器为1或(-1)的最有效方法

我现在正在参加一个装配课程,那个检查我们家庭作业的人是一个非常迂腐的老派优化狂.例如,如果他看到,他会扣除10%:

mov ax, 0
Run Code Online (Sandbox Code Playgroud)

代替:

xor ax,ax
Run Code Online (Sandbox Code Playgroud)

即使它只使用一次.

我不是一个完整的汇编程序初学者,但我不是一个优化专家,所以我需要你的帮助(可能是一个非常愚蠢的问题,但无论如何我都会问):如果我需要将寄存器值设置为1或(-1)最好使用:

mov ax, 1
Run Code Online (Sandbox Code Playgroud)

或做类似的事情:

xor ax,ax
inc ax
Run Code Online (Sandbox Code Playgroud)

我真的需要一个好成绩,所以我试图让它尽可能优化.(我需要优化时间和代码大小)

performance assembly xor cpu-registers x86-16

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

Android客户端使用线程与服务器通信的最佳实践

我正在构建一个Android应用程序,只要应用程序正在运行,它就会定期与服务器通信.

我通过在应用程序启动时启动与服务器的连接来执行此操作,然后我有一个单独的thread用于接收调用的消息ReceiverThread,这thread将从中读取消息socket,对其进行分析,并将其转发到应用程序的相应部分.

thread在循环中运行,读取它必须读取的内容,然后阻止read()命令直到新数据到达,因此它将大部分时间用于阻止.

我处理通过另一个线程发送消息,称为SenderThread.我想知道的是:我应该SenderThread以类似的方式构建吗?我应该为这个线程维护一些形式的队列,让它发送队列中的所有消息,然后阻塞,直到新消息进入队列,或者每次需要发送消息时我应该只启动线程的新实例,让它发送消息,然后"死"?我倾向于第一种方法,但我不知道在性能方面(在内存中保持阻塞线程与初始化新线程)以及代码正确性方面实际上更好.

此外,由于我的所有活动都需要能够发送和接收消息,我持有对我Application班级中两个线程的引用,这是一种可接受的方法还是我应该以不同的方式实现它?

我遇到的一个问题是,有时如果我关闭我的应用程序并再次运行它实际上有两个ReceiverThread实例,所以我得到一些消息两次.

我猜这是因为我的应用程序实际上没有关闭,前一个线程仍处于活动状态(在read()操作上被阻止),当我再次打开应用程序时,新线程被初始化,但两者都连接到服务器,所以服务器将消息发送给两者.有关如何解决此问题的任何提示,或者如何完全重新组织它以便它是正确的?

我试着查看这些问题,但发现了我的第一个问题的一些相互矛盾的例子,没有什么是有用的,适用于我的第二个问题......

java android client-server

14
推荐指数
1
解决办法
3万
查看次数

帕斯卡的重复...直到与C的比赛......同时

在C中有一个while循环和pascal(几乎)等价是重复直到循环,但两者之间有一个小的差异,而两个结构将至少迭代一次并检查它们是否只需要再次循环最后,在pascal中你编写了需要满足的条件来终止循环(REPEAT UNTIL something)在C中你写入需要满足的条件来继续循环(DO WHILE something).有没有理由存在这种差异,还是只是一个武断的决定?

c syntax pascal loops

4
推荐指数
2
解决办法
1万
查看次数