You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C语言函数参数内存分配疑问:burger参数地址始终更大的原因

C语言函数参数内存分配疑问:burger参数地址始终更大的原因

兄弟,你先搞清楚一个关键误解:gdb里显示的menu=0x7ffe46b5db20这种内容,是参数变量的值——也就是这个指针指向的调用方里的变量地址,而不是参数本身在栈中的内存位置哦!

你两次编译只是调换了on_menu的参数顺序,但调用这个函数的代码里,burgermenu这两个局部变量的内存分配位置根本没改啊!比如在调用方里,burger这个数组变量的内存地址本来就比menu变量的地址高(这取决于编译器对局部变量的分配顺序,通常栈是向下增长的,先定义的局部变量会被分配在更高的地址上)。所以不管你把它们谁放在第一个参数位置传递,传递的都是它们自身的地址,自然burger参数的值(也就是它指向的地址)就总是比menu的大啦。

如果你真的想观察函数参数本身在栈中的内存地址,可以在gdb里用p &menup &burger来查看参数变量自己的地址,这时候你会发现:第一次编译时,menu参数的地址会比burger参数的地址低(因为x86架构下参数通常从右往左压栈,栈向下增长,左边的参数后入栈,地址更低);第二次编译调换参数顺序后,burger参数的地址会比menu参数的地址低,这才是参数本身的内存分配变化。

内容来源于stack exchange

火山引擎 最新活动