是在函数内部重新声明结构还是将其声明为静态并每次都设置为0更好?

问题描述 投票:1回答:1

基本上,如果我有类似的结构:

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 struct c99
1个回答
0
投票

如果C程序指定了实际的静态对象或自动在堆栈上分配的对象,则这两段代码的性能几乎相同。基于如何解决一个问题,可能会有微小的性能差异,或者基于关于其他数据和缓存属性的分配位置,可能存在一些性能差异。 (特别是自动版本可能具有更好的属性,因为内存不是专门为结构保留的。在执行其他功能而不是some_function时,它将与其他数据共享,因此自动版本可能会更频繁地驻留在缓存中,并且从而减少了对内存的访问。此外,由于它将与其他功能共享,因此整个程序可能总体上使用较少的内存,从而提高了性能。)

但是,C程序并没有直接指定计算机必须执行的操作(尽管某些C实现可能以这种方式实现或具有执行此操作的开关,或者接近它的方法)。根据C标准,C程序在抽象机中指定虚拟计算。 C编译器的工作是将计算结果转换为真实机器的程序。这样做具有很大的自由度。

© www.soinside.com 2019 - 2024. All rights reserved.