c - 在堆上初始化结构的两种方法哪个更好
问题描述
学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个成员,但是成员的数量会不会影响结论呢?
解决方案
编译器会将这两个函数优化为相同的代码。在 Godbolt 上亲自查看
这是微优化。如果您关心性能,首先要进行基准测试和分析,然后再优化热点。
推荐阅读
- javascript - 内联钩子状态更改导致错误“错误:重新渲染过多。React 限制渲染次数以防止无限循环。”
- javascript - 为什么我在第一次点击和第二次点击或任何点击后我得到正确的输入元素,反应js?
- python - 如何使用相关的序列化程序 Django 休息框架进行发布请求
- c++ - 找不到 Glog(缺少:GLOG_INCLUDE_DIR GLOG_LIBRARY)
- javascript - 在数组中查找序列的第一个索引
- julia - 在Julia中生成具有两个值的所有项目组合?
- string - 在最后一个“/”字符之后从字符串的最后一部分创建变量
- javascript - 如何将自定义字体的文本保存到 .txt/.png/.pdf 文件?
- python - python - 组合 3 个数据框,但需要按 1 列中的值重新对齐数据
- android - Android Kotlin 如何从 Firebase 获取记录