创建指针会占用大量资源吗?

  • 本文关键字:资源 指针 创建 c++
  • 更新时间 :
  • 英文 :


制作不必要的指针是否明显会消耗更多的资源,而不仅仅是使用对象本身?例如:

Enemy e1;
e1.attack();

Enemy e1;
Enemy *ptr = &e1;
ptr->attack();

创建和使用指针会消耗大量资源吗?还是创建指针没有那么多用处,无论它是类指针还是整数指针?

正如您所说,没有必要使用指针,我想您有一个用例,其中使用实际上并不是不必要的,但提供了一些好处。

您可以使用一个简单的示例来验证大多数编译器(我测试了 GCC 5.1、9.0 和 clang 8.0,所有 x64(在访问对象时是否生成完全相同的代码(因此资源使用没有差异(: -径直 - 通过指针 - 参考资料

#include <iostream>
using namespace std;
class Enemy
{
public:
Enemy() {}
void attack() 
{
cout << "attack";
}
};
#define VERSION 1
int main(int argc, char* argv[]) {
Enemy e;
#if VERSION == 1
e.attack();
#elif VERSION == 2
Enemy& e2 = e;
e2.attack();
#else
Enemy* e3 = &e;
e3->attack();
#endif
}

您可以使用Godbold轻松尝试不同的编译器和选项(包括上面的示例(

指针内存占用具有与内存地址大小等效的固定大小,例如 64 位机器为 64 位,请参阅此问题。它使用该内存量,而与它指向的值的大小/类型无关,无论是基元还是类。

也就是说,将值衰减到它的指针是容易出错的,因为您可能会使该指针无效并遭受无效的内存访问或未定义的行为。如果你能避免它,为什么不呢?

最新更新