我并不想复制关于C不能返回数组的常见问题,而是要深入研究它.
我们不能这样做:
char f(void)[8] {
char ret;
// ...fill...
return ret;
}
int main(int argc, char ** argv) {
char obj_a[10];
obj_a = f();
}
Run Code Online (Sandbox Code Playgroud)
但我们可以这样做:
struct s { char arr[10]; };
struct s f(void) {
struct s ret;
// ...fill...
return ret;
}
int main(int argc, char ** argv) {
struct s obj_a;
obj_a = f();
}
Run Code Online (Sandbox Code Playgroud)
所以,我正在浏览由gcc -S生成的ASM代码,并且似乎正在使用堆栈,-x(%rbp)与任何其他C函数返回一样进行寻址.
直接返回数组有什么用?我的意思是,不是在优化或计算复杂性方面,而是在没有结构层的情况下这样做的实际能力方面.
额外数据:我在x64 Intel上使用Linux和gcc.
我们知道,perl将其'hash'类型实现为具有计算索引的表,其中这些索引是截断的哈希值.
我们也知道,散列函数可以(并且将通过概率)发生冲突,为2个或更多不同的输入提供相同的散列.
然后:当perl解释器发现密钥生成与另一个密钥相同的散列时,它如何处理?它完全处理它吗?
注意:这不是关于散列算法,而是关于散列表实现中的冲突解决方案.