首页 > 解决方案 > 在堆上初始化结构的两种方法哪个更好

问题描述

学C的时候就想到了这个问题,想到了两种在堆上初始化结构的方法。

typedef struct Point {
    int x;
    int y;
    int z;
} Point;

Point *test1(int x, int y, int z) {
    Point *point = (Point *) malloc(sizeof(Point));
    point->x = x;
    point->y = y;
    point->z = z;
    return point;
}

Point *test2(int x, int y, int z) {
    Point *point = (Point *) malloc(sizeof(Point));
    *point = (Point) {x, y, z};
    return point;
}

test1中的写法是我常用的,但是test2中的写法似乎更方便一些。但是 test2 会创建额外的对象吗?虽然这里的结构只有3个成员,但是成员的数量会不会影响结论呢?

标签: cperformance

解决方案


编译器会将这两个函数优化为相同的代码。在 Godbolt 上亲自查看

这是微优化。如果您关心性能,首先要进行基准测试和分析,然后再优化热点。


推荐阅读