我在C中定义了一个函数,如下:
char **fun(size_t *size) {
size_t local_size = 0;
while (...) {
//Function code...
local_size++;
}
*size = local_size;
//Code for returning
}
如您所见,它有一个局部变量,用作计数器,然后通过将大小引用的值设置为局部大小的值来返回它。
此外,我还通过直接使用输入引用指向的值来实现该函数,如下所示:
char **fun(size_t *size) {
*size = 0;
while (...) {
//Function code...
(*size)++;
}
//Code for returning
}
鉴于它们具有相同的行为,如果我知道函数内会对变量进行多次访问,哪个选项更有效?使用局部变量选项来利用堆栈内存分配是否更快?
第一个
*size++
是错误的;增加 size
,而不是 *size
。您需要 (*size)++
或 ++*size
。
如果
//Function code...
包含任何可能访问 size
指向的内容,则编译器无法通过缓存 *size
的副本进行优化:
size_t
为别名的对象的文件范围标识符,则 size
可能指向该对象。*size
。*size
,因为允许字符类型访问任何对象。size
指向的同一个对象。因此,您最好使用该函数的第一个版本。