gpt4 book ai didi

c++ - 什么占用更多空间: Object or Struct?

转载 作者:行者123 更新时间:2023-11-30 20:44:02 25 4
gpt4 key购买 nike

每当我们从类创建对象时,它都会在堆上创建,与在堆栈上占用内存的结构变量相比,它会占用更多空间。如果我创建一个具有相同属性的 Person 类和一个 struct P,那么它应该证明我刚才所说的是正确的。请检查以下 2 个代码片段:

#include <iostream.h>
#include <conio.h>
#include <string>
using namespace std;

class Person{

int age;
string hair_color;
float height;

public:
Person::Person(int n)
{
age = n;
}

int Person::getAge()
{
return age;
}



};

struct P{

int age;


};

main()
{

Person person(45);

//Person *person = new Person(45);


P myPerson;

cout<<sizeof(person)<<endl;
cout<<sizeof(myPerson)<<endl;

//cout<<"Age: "<<person->getAge();
getch();
}

当我编写这段代码时:

#include <iostream.h>
#include <conio.h>
#include <string>
using namespace std;

class Person{

int age;
string hair_color;
float height;

public:
Person::Person(int n)
{
age = n;
}

int Person::getAge()
{
return age;
}



};

struct P{

int age;


};

main()
{

// Person person(45);

Person *person = new Person(45);


P myPerson;

cout<<sizeof(person)<<endl;
cout<<sizeof(myPerson)<<endl;


getch();
}

如果我对对象和引用的理解有误,请纠正我。我想从我的代码中知道什么占用了更多空间:对象还是结构?

最佳答案

在某些语言 (C#) 中,struct 用于定义可以在堆栈上分配的类型,而 class 实例必须在堆上分配。

C++中,没有这样的区别,由实例化器决定是在堆上还是在堆栈上分配对象。例如

Person* person = new Person(45);

在堆上分配 Person 实例,同时

Person person(45);

在堆栈上分配一个类似的实例。

此外,一般没有任何内容支持“与在堆栈上占用内存的结构变量相比,在堆上创建的占用更多空间”的说法。堆分配通常会带来一些开销(内存方面和处理时间),但堆栈空间通常更加有限(通常每个线程都有固定的堆栈大小)。

有很多关于何时使用什么的文档,甚至 dicussions here on SO 。简而言之,堆栈用于小型、短期对象(函数或类似范围内的临时对象)。

关于c++ - 什么占用更多空间: Object or Struct?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19609226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com