考虑使用for循环的示例:
for(int i = 0; i <= NUM; i++); // forward
for(int i = NUM; i >= 0; i--); // reverse
我用gcc (linux-64)测试了这个循环。在没有任何优化标志的情况下,前向循环速度更快,当优化到O3/O4时,反向循环速度更快。
在某个地方,我听说由于更好的缓存替换技术(),前向循环更快。
我个人认为,反向循环应该更快(无论NUM是常数还是变量)。因为任何微处理器都会有一条指令与0、i >= 0 (即JLZ (jump if less than zero)和等效的)进行比
我知道,如果我试图打印一个数组元素的地址,它将是一个来自虚拟内存的地址,而不是来自真实内存(物理内存),即DRAM的地址。
printf ("Address of A[5] and A[6] are %u and %u", &A[5], &A[6]);
我发现地址是连续的(假设元素是字符)。实际上,它们可能不是连续的,至少在DRAM中不是。我想知道真正的地址。我该怎么做呢?
无论是Windows还是Linux,我都需要知道这一点。
public class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
try {
Thread.sleep(10000);
} catch(InterruptedException e) {
/* ignored */
}
}
}
下面是我运行这个小程序时top所说的话:
PID USER PR NI
根据手册页: * VmLck: Locked memory size (see mlock(3)).
* VmPin: Pinned memory size (since Linux 3.2).
These are pages that can't be moved because something needs
to directly access physical memory. 我知道什么是锁定内存(mlock,mlockall),但老实说,我不明白锁定内存的概念,以及它与锁定内存有何不同。 有没有人能举个例子解释一下?