【发布时间】:2021-10-05 10:49:05
【问题描述】:
我正在阅读一本关于 c 的书,以下段落对我来说有点不清楚:
令人惊讶的是,在上面的示例中传递指针效率不高!这是因为 int 类型是 4 个字节,复制它比复制其指针的 8 个字节更有效。但对于结构和数组,情况并非如此。由于复制结构和数组是按字节完成的,并且它们中的所有字节都应该一个一个地复制,因此通常最好改为传递指针。
据我所知,CPU 中的所有操作都仅限于算术(加或 minعس)或按位操作,所以
作者复制数组和结构是什么意思,int复制不就是位移操作吗?
二:指针是数组吗?
注意:书名是 Extreme C,由 packT 出版 下面的例子就是作者所指的:
#include <stdio.h>
void func(int* a) {
int b = 9;
*a = 5; a = &b;
}
int main(int argc, char** argv) {
int x = 3;
int* xptr = &x;
printf("Value before call: %d\n", x);
printf("Pointer before function call: %p\n", (void*)xptr); func(xptr);
printf("Value after call: %d\n", x);
printf("Pointer after function call: %p\n", (void*)xptr);
return 0;
}
'''
【问题讨论】:
-
如果您显示本书所指的实际代码会有所帮助。
-
我认为 C 或 C++ 没有任何用于复制数组的内置机制。由程序员决定如何复制数组。关于
structs,我认为默认情况下,我们更有可能看到逐个成员的分配,而不是逐个字节的副本。所以我很确定我不同意作者的观点,尽管我不太确定他们在说什么。 -
@TimRandall:C 标准对实现是逐个成员、逐个字节还是逐个存储单元复制结构保持沉默。它授权实现使用它想要的任何方法(允许它们复制或忽略填充字节)并且不需要它们中的任何一个。我希望 POD 的 C++ 标准是相同的。
-
@RemyLebeau 帖子已更新
标签: c++ arrays c function data-structures