我最近在越来越多的项目中使用C,几乎最终创建了自己的带有结构指针的"对象实现".但是,我很好奇纯粹的功能样式(带结构)和结构之间的速度差异,这些结构在更现代的面向对象风格中调用函数指针.
我已经创建了一个示例程序,并且不确定为什么时序差异如此之大.
该程序使用两个计时器并记录完成每个任务所花费的时间(一个接一个).这不包括内存分配/解除分配,并且两种技术都以类似的方式设置(每个结构有三个整数作为结构的指针).
代码本身只是在一个for循环中重复地将三个数字加在一起,持续时间为宏LOOP_LEN中指定的持续时间.
请注意我有内联测量的函数,编译器优化从无到完全优化(/ Ox)(我在Visual Studio中将其作为纯.c文件运行).
// MAGIC object
typedef struct {
// Properties
int* x;
int* y;
int* z;
// Methods
void(*init)(struct magic* self, int x, int y, int z);
int(*sum)(struct magic* self);
}magic;
// Variable init function
void* init(magic* self, int x, int y, int z) {
// Assign variables to properties
*self->x = x;
*self->y = y;
*self->z = y;
return;
}
// Add all variables together
inline int …Run Code Online (Sandbox Code Playgroud)