使用以下代码是否存在任何执行速度差异:
cmp al, 0
je done
Run Code Online (Sandbox Code Playgroud)
以下内容:
or al, al
jz done
Run Code Online (Sandbox Code Playgroud)
我知道JE和JZ指令是相同的,并且使用OR可以提供一个字节的大小改进.但是,我也关心代码速度.逻辑运算符似乎比SUB或CMP更快,但我只是想确定.这可能是规模和速度之间的权衡,或双赢(当然代码将更加不透明).
为了好奇,我想为标准C库中的一些函数编写最小的替换.到目前为止,我已经完成了printf(),strlen(),strcpy(),memcpy(),memset(),等...但是当我尝试使用printf函数,我不知道如何实现stdarg.h!我能做到这一点的方式是什么?
它是使用宏还是实际功能?
我在32位x86上使用gccOR clang,如果它有助于使这更容易回答.
我想生成一个随机布尔值用于游戏,因此它不需要加密安全.我将stdbool.h在我的代码中使用,我也已经完成了#include <stdlib.h>.优选地,它应该非常快(因为我将生成其中许多),并且它应该能够在C89中完成(只是偏好).我对C++中的这一切并不感兴趣.
以下是我提出的一些方法:
我最近写了很多程序来struct绕过函数,以避免全局变量.但是,我想知道传递struct自身或其指针是否更有效.它听起来应该是这样,因为指针(在我的64位GNU/Linux系统上)是8个字节,而struct充满指针显然远不止于此.
但是,如果我有这个struct:
struct Point {
int x;
int y;
}
Run Code Online (Sandbox Code Playgroud)
这是8个字节,与指针大小相同,是将整个struct传递给函数还是传递指针更好?我非常精通C内存分配,因此malloc在初始化指针时使用和朋友不是问题.
另一个想法是,如果它们很大,直接传递结构会占用大量的堆栈空间.然而,简单地使用指针会耗尽内存,这free很容易编辑.
我正在做一个roguelike游戏.我想将地图表示为结构数组,例如在数组中有256个结构.地图是一个16*16的图块网格,每个图块都有属性,例如它上面是否有项目.
所以说我想要一个256个结构的数组tiles:
struct tiles {
char type; /* e.g. dirt, door, wall, etc... */
char item; /* item on top of it, if any */
char enty; /* entity on top of it, e.g. player, orc if any */
}
Run Code Online (Sandbox Code Playgroud)
然后,我需要访问这样的结构数组:
int main(void)
{
unsigned short int i;
struct tiles[256];
for (i = 1; i <= 256; i++) {
struct tiles[i].type = stuff;
struct tiles[i].item = morestuff;
struct tiles[i].enty = evenmorestuff;
}
}
Run Code Online (Sandbox Code Playgroud)