gpt4 book ai didi

c++ - 当调用带有文字值的函数时,内存中会发生什么?

转载 作者:行者123 更新时间:2023-11-30 01:26:09 27 4
gpt4 key购买 nike

假设我有一个任意函数:

void someFunc(int, double, char); 

然后我调用 someFunc(8, 2.4, 'a');,实际发生了什么? 8、2.4 和 'a' 如何获取内存、移入该内存并传递给函数?编译器对这些情况有什么类型的优化?如果我混合和匹配参数,例如 someFunc(myIntVar, 2.4, someChar);,会怎样?

如果函数声明为 inline 会发生什么?

最佳答案

值是否为字面值没有区别(除非函数是内联的,然后编译器可以优化一些东西)。

通常,参数被放入寄存器或函数参数栈中。无论它们是显式值还是变量。

没有优化,参数被插入参数堆栈。第一种情况,先取x的值放入寄存器eax,然后压入参数栈。 foo 打印 x

    foo(x);
00361A75 mov eax,dword ptr [x]
00361A78 push eax
00361A79 call get_4 (3612B7h)
00361A7E add esp,4
foo(3);
00361A81 push 3
00361A83 call get_4 (3612B7h)
00361A88 add esp,4

通过优化,函数对编译器可见(在我的示例中)并且调用被完全跳过:

    foo(x);
01011000 mov ecx,dword ptr [__imp_std::cout (101203Ch)]
01011006 push 3
01011008 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (1012038h)]
foo(3);
0101100E mov ecx,dword ptr [__imp_std::cout (101203Ch)]
01011014 push 3
01011016 call dword ptr [__imp_std::basic_ostream<char,std::char_traits<char> >::operator<< (1012038h)]

foo 定义为:

void foo(int x)
{
std::cout << x;
}

关于c++ - 当调用带有文字值的函数时,内存中会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10988377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com