基本上,如果我有类似的结构:
struct header {
char ptr[512];
};
而且我有一个类似的功能:
void some_function() {
struct header header = { 0 };
// do something with struct
}
像这样进行操作实际上是否会对性能方面有所帮助:
void some_function() {
static struct header header;
memset((char *)&header, 0, sizeof(header));
// do something with struct
}
我知道如果该结构包含指针,则memset并不总是有效,因为NULL可能不会位于地址0x0000上,但是对于这种情况,当这无关紧要时,有什么更好的方法呢?]
[基本上,如果我有这样的结构:struct header {char ptr [512]; };我有一个像这样的函数:void some_function(){struct header header = {0}; //用struct做某事} ... >>
如果C程序指定了实际的静态对象或自动在堆栈上分配的对象,则这两段代码的性能几乎相同。基于如何解决一个问题,可能会有微小的性能差异,或者基于关于其他数据和缓存属性的分配位置,可能存在一些性能差异。 (特别是自动版本可能具有更好的属性,因为内存不是专门为结构保留的。在执行其他功能而不是some_function
时,它将与其他数据共享,因此自动版本可能会更频繁地驻留在缓存中,并且从而减少了对内存的访问。此外,由于它将与其他功能共享,因此整个程序可能总体上使用较少的内存,从而提高了性能。)
但是,C程序并没有直接指定计算机必须执行的操作(尽管某些C实现可能以这种方式实现或具有执行此操作的开关,或者接近它的方法)。根据C标准,C程序在抽象机中指定虚拟计算。 C编译器的工作是将计算结果转换为真实机器的程序。这样做具有很大的自由度。