C语言函数alloca()在栈上分配内存

众所周知,C++普通方法创建数组时,尺寸指定必须是个常数,不能是变量,比如:
int length = 100;
char message[length]; // error
动态分配方式在堆区构造数组,之后要手动释放

\quad\quad 如果该数组的生命周期只需要存在很短的时间,比如存储错误信息,之后打印到屏幕就结束其生命周期。这种情况如果每次都动态分配,几行代码之后手动释放。可以但没有必要

// C++
char* message = new char[size]; 
delete [] message;
// C
char* message = (char*)malloc(size*sizeof(char))
free(message);

利用alloca()栈区动态分配

\quad\quad 有时候我们只是想暂时打印日志信息或者错误信息,并不需要长期保存其内容,随着程序运行超出数组作用域,内存自动释放。下次需要的时候再动态的申请,不用管理释放,这样很方便

if(!result)
{
	int length;	
	length = getLogLength();  		//凭空捏造的函数
	char* message = (char*)alloca(sizeof(char) * length);
	message = getLogInformation();	//凭空捏造的函数
	std:cout << message << std::endl;
}
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宗浩多捞

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值