函数的栈空间,极速调用之内联函数

Posted Respect@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数的栈空间,极速调用之内联函数相关的知识,希望对你有一定的参考价值。

函数的栈空间

要避免栈空间溢出。
当调用一个函数时,就会在栈空间,为这个函数,分配一块内存区域,
这块内存区域,专门给这个函数使用。
这块内存区域,就叫做“栈帧”。在这里插入图片描述
在这里插入图片描述

demo1:

#include <iostream>
#include <Windows.h>

void test(void) {
	//运行时将因为栈帧空间溢出,而崩溃
	char buff[2000000];  
	std::cout << (int)buff[sizeof(buff) - 1] <<std::endl;
}

int main(void) {
	test();
	system("pause");
	return 0;
}

极速调用之内联函数

函数的作用:
避免重复制造轮子。
(避免重复多次写相同的代码)

函数的缺点:
每调用一次函数,就会为这个函数分配一个“栈”,
在计算机底层做很多准备工作(保护原来的执行环境,切换到新的执行环境)
有一定的“时间开销”

解决方案:
使用内联函数

内联函数:
当编译器在编译时, 如果遇到内联函数,
就会直接将整个函数体的代码插入”调用处”,
就相当于内联函数的函数体, 在调用处被重写了一次。
以避免函数调用的开销, 获得更快的时间。

内联函数的缺点:
使调用内联函数的程序,变得“臃肿”,消耗调用函数的“栈”空间。

内联函数的用法:
inline int add(int a, int b)
{
return a + b;
}

内联函数的使用场合:
1)内联函数中的代码应该只是很简单、执行很快的几条语句。
2)这个函数的使用频度非常高,比如在一个循环中被千万次地使用。
数的定义(即整个数体),而不能只出现内联函数的声明。

以上是关于函数的栈空间,极速调用之内联函数的主要内容,如果未能解决你的问题,请参考以下文章

代码重构之内联函数

C++之内联函数

从c语言函数调用看程序的栈机制

C语言函数调用及栈帧结构

函数知识学习和第一周简单总结

浅析StackTrace