gpt4 book ai didi

c++ - 如何加速返回指向 C++ 对象指针的函数?

转载 作者:搜寻专家 更新时间:2023-10-30 23:58:29 24 4
gpt4 key购买 nike

我是一名机械工程师,所以请理解我没有接受过正确编码方面的培训。我有一个有限元代码,它使用网格来制作制作模型的元素。该元素对这个问题并不重要,因此我将其省略。元素和网格是从文件中读入的,这部分工作。

class Grid
{
private:
int id;
double x;
double y;
double z;
public:
Grid();
Grid(int, double, double, double);
int get_id() { return id;};
};

Grid::Grid() {};
Grid::Grid(int t_id, double t_x, double t_y double t_z)
{
id = t_id; x = t_x; y = t_y; z = t_z;
}

class SurfaceModel
{
private:
Grid** grids;
Element** elements;
int grid_count;
int elem_count;
public:
SurfaceModel();
SurfaceModel(int, int);
~SurfaceModel();
void read_grid(std::string);
int get_grid_count() { return grid_count; };
Grid* get_grid(int);
};

SurfaceModel::SurfaceModel()
{
grids = NULL;
elements = NULL;
}

SurfaceModel::SurfaceModel(int g, int e)
{
grids = new Grid*[g];
for (int i = 0; i < g; i++)
grids[i] = NULL;
elements = new Element*[e];
for (int i = 0; i < e; i++)
elements[i] = NULL;
}

void SurfaceModel::read_grid(std::string line)
{
... blah blah ...
grids[index] = new Grid(n_id, n_x, n_y, n_z);
... blah blah ....
}

Grid* SurfaceModel::get_grid(int i)
{
if (i < grid_count)
return grids[i];
else
return NULL;
}

当我需要实际使用网格时,我使用 get_grid 可能是这样的:

SurfaceModel model(...);
.... blah blah .....
for (int i = 0; i < model.get_grid_count(); i++)
{
Grid *cur_grid = model.get_grid(i);
int cur_id = cur_grid->get_id();
}

我的问题是调用 get_grid 花费的时间似乎比我认为简单地返回我的对象​​所花的时间要多。我在代码上运行了 gprof,发现在进行非常大的模拟时,get_grid 被调用了大约 40 亿次,而另一个使用 x、y、z 的操作发生的次数大致相同。该操作执行一些乘法。我发现 get_grid 和 math 花费的时间大致相同(~40 秒)。这好像我做错了什么。有没有更快的方法可以让那个物体离开那里?

最佳答案

我认为您忘记设置 grid_countelem_count

这意味着,它们将具有未初始化(不确定)的值。如果您循环获取这些值,您很容易以循环很多迭代结束。

SurfaceModel::SurfaceModel() 
: grid_count(0),
grids(NULL),
elem_count(0),
elements(NULL)
{
}

SurfaceModel::SurfaceModel(int g, int e)
: grid_count(g),
elem_count(e)
{
grids = new Grid*[g];
for (int i = 0; i < g; i++)
grids[i] = NULL;
elements = new Element*[e];
for (int i = 0; i < e; i++)
elements[i] = NULL;
}

但是,我建议您在这个程序中去掉每个 new 实例(并为网格使用 vector )

关于c++ - 如何加速返回指向 C++ 对象指针的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20363581/

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