当前位置:网站首页>c语言在结构体传参时参数压栈问题
c语言在结构体传参时参数压栈问题
2022-04-23 14:13:00 【KissKernel】
首先在内存中,分为三大区域,栈区,堆区,以及静态区。栈区中存放有局部变量,形参,以及函数调用所开辟的空间。堆区主要是关于动态内存的分配。静态区主要是存放全局变量和静态变量。
关于参数压栈的问题是在结构体传参这个地方提出的,c语言中函数传参时,参数是需要压栈的。如果传一个结构体对象结构体过大,参数压栈的系统开销过大,性能就会下降。涉及的就是函数栈帧的创建和销毁。
下面引用以简单代码为例
#include<stdio.h>
int add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int a = 20, b = 10;
int ret = 0;
ret = add(a, b);
return 0;
}
代码在内存中如图抽象
b传参给y时相当于在栈区中拷贝了一份b。c也是一样的道理。这只是给函数传一个变量,如果b变为结构体,就会因为结构体过大而造成栈区内存消耗多,导致性能下降。所以我们在结构体传参时通常采用传地址的方法。
版权声明
本文为[KissKernel]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_62745420/article/details/121779865
边栏推荐
猜你喜欢
Logback logger and root
MYSQL一种分表实现方案及InnoDB、MyISAM、MRG_MYISAM等各种引擎应用场景介绍
统信UOS卸载php7.2.24,安装php7.4.27 ;卸载再安装为PHP 7.2.34
OpenStack命令操作
循环队列的基本操作,你学会了吗?
API Gateway/API 网关(四) - Kong的使用 - 集成Jwt和熔断插件
Operation instructions of star boundary automatic text translator (advanced version)
01-nio basic ByteBuffer and filechannel
Man man notes and @ reboot usage of crontab
TLS/SSL 协议详解 (30) SSL中的RSA、DHE、ECDHE、ECDH流程与区别
随机推荐
MYSQL一种分表实现方案及InnoDB、MyISAM、MRG_MYISAM等各种引擎应用场景介绍
XX project structure notes
SSH 通过跳板机连接远程主机
flannel 原理 之 TUN模式
Nacos uses demo as configuration center (IV)
redis数据库讲解二(redis高可用、持久化、性能管理)
C语言知识点精细详解——数据类型和变量【2】——整型变量与常量【1】
A table splitting implementation scheme of MySQL and InnoDB, MyISAM and MRG_ Introduction to MyISAM and other engine application scenarios
Debug on TV screen
解决ssh配置文件优化以及连接慢的问题
Date的after时间判断
About the configuration and use of json5 in nodejs
x509证书cer格式转pem格式
VMware installation 64 bit XP Chinese tutorial
线程间控制之Semaphore使用介绍
redis数据库讲解(四)主从复制、哨兵、Cluster群集
文字组合,不重复,做搜索或查询关键字匹配
在电视屏幕上进行debug调试
void*是怎样的存在?
LLVM - 生成加法