当前位置:网站首页>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
边栏推荐
猜你喜欢

setcontext getcontext makecontext swapcontext

进入新公司,运维工程师从下面这几项了解系统的部署

KVM learning resources

API Gateway/API 网关(三) - Kong的使用 - 限流rate limiting(redis)

Notes on Visio drawing topology

MySQL数据库讲解(八)

统信UOS卸载php7.2.24,安装php7.4.27 ;卸载再安装为PHP 7.2.34

A table splitting implementation scheme of MySQL and InnoDB, MyISAM and MRG_ Introduction to MyISAM and other engine application scenarios

爬虫练习题(一)

Qt实战:云曦聊天室篇
随机推荐
Nacos uses demo as configuration center (IV)
Pass in external parameters to the main function in clion
MySQL数据库讲解(八)
爬虫练习题(一)
Redis数据库讲解(一)
redis数据库讲解二(redis高可用、持久化、性能管理)
SSH 通过跳板机连接远程主机
gif转为静态图片处理
asp.net使用MailMessage发送邮件的方法
DP - [noip2000] grid access
剑指offer刷题(1)--面向华为
Thread group ThreadGroup uses introduction + custom thread factory class to implement threadfactory interface
squid代理
线程间控制之Semaphore使用介绍
man man随记和crontab的@reboot用法
MySQL lock database lock
JS progress bar, displaying the loading progress
std::map 和 std::vector 内存释放
DP energy Necklace
百度笔试2022.4.12+编程题目:简单整数问题