栈上分配存储器的方法 alloca 抽样

栈上分配存储器的方法 alloca 抽样

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

声明一个局部变量,必须分配在堆栈上,但有或没有它的方法

当然,,那是 alloca

下面的代码显示了可变长度参数转换,alloca 要使用


int main(int argc, char ** argv) {

     char **argv2;
     int i,n;
     n=0;
     while(argv[n] != NULL)
         n++;

     printf("n %d\n",n);


     argv2 = alloca((n + 2) * sizeof(*argv));
     argv2[0] = "program";
     for( i=0; i <= n; i++)
        argv2[i+1] = argv[i];
    argv2[n+2] = NULL;

    i = 0;
    while( argv2[i] != NULL)
      printf("%s\n",argv2[i++]);

}

(当然:这个样例不是非常全面,应该把alloca写道一个函数中,但此函数返回时。内存释放)

ref: http://baike.baidu.com/view/3977355.htm?

fr=aladdin

在调用 alloca() 的函数返回的时候, 它分配的内存会自己主动释放。也就是说, 用 alloca 分配的内存在某种程度上局部于函数的 ``堆栈帧"  或上下文中。

alloca() 不具可移植性, 并且在没有传统堆栈的机器上非常难实现。

当它的返回值直接传入还有一个函数时会带来问题, 如 fgets(alloca(100), 100, stdin)。 因为这些原因, alloca() 不合标准, 不宜使用在必须广泛移植的程序中, 无论它可能多么实用。 既然 C99 支持变长数组(VLA), 它能够更好的完成 alloca() 一旦任务。

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116971.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 浅谈js原型和原型链接_js原型链阮一峰

    浅谈js原型和原型链接_js原型链阮一峰一、简述对于javascript对象(函数)原型和原型链的理解,其实不那么难,简单来说,需要理解什么是原型,怎么访问原型,什么是原型链,怎么通过原型链去访问原型,就可以大概理清楚原型和原型链的基础知识。二、浅析1、何为原型在js引擎启动的时候,其内核就生成了最基本的Object和Function的原型内容,也就是最原始最自然的代码。(1)Object的原型是一个对象变量,该对象变量存…

    2025年6月29日
    4
  • android armeabi armeabi-v7a(v7a和x86)

    了解起因昨天师傅问,你知道这俩个是什么么?有什么作用么?(如下图所示)现在还记得我那一脸蒙比的样子,诺诺的回答不晓得。师傅说这个是为了兼容一些手机,(此处省略滔滔不绝若干。。。)。听的我更加蒙比了,之前只是知道要把.so库扔进去,但是为什么扔,就不懂了,何谈我怎会知道那目录?(PS:还是自己差太多了。。。)好尴尬。。。查询前期准备首先按照四个部分来查询,分别如下:一.lib…

    2022年4月13日
    132
  • 基于情感词典的情感分析流程图_情感的解释

    基于情感词典的情感分析流程图_情感的解释思路以及代码都来源于下面两篇文章:一个不知死活的胖子:Python做文本情感分析之情感极性分析 RanFengzheng的博客:基于情感词典的文本情感极性分析相关代码基于情感词典的情感分析应该是最简单的情感分析方法了,大致说一下使用情感词典进行情感分析的思路:对文档分词,找出文档中的情感词、否定词以及程度副词,然后判断每个情感词之前是否有否定词及程度副词,将它之前的否定词和程度副词划分为一个组…

    2022年8月23日
    10
  • ubuntu下安装pycharm教程_可以在开始菜单中创建快捷方式吗

    ubuntu下安装pycharm教程_可以在开始菜单中创建快捷方式吗在Ubuntu18中安装Pycharm及创建Pycharm快捷方式一、在Ubuntu18.04中安装Pycharm1.到PyCharm网站下载pycharmprofessional2018.2.4版本:https://www.jetbrains.com/pycharm/点击DOWNLOADNOW按钮,进入系统版本下载页面图片1图片2点击专业版下载2.将下载的这个安装包解…

    2022年8月28日
    8
  • Linux查看当前用户及其权限管理[通俗易懂]

    Linux查看当前用户及其权限管理[通俗易懂]linux查看当前用户cwhoami或whoami或whomomlikes[ec2@ip-10-10-5-79~]$whoami创建用户打开终端,输入:sudoadduser[用户名][ec2@ip-10-10-5-79~]$sudoadduserxiaozhou切换用户打开终端,输入:su[用户名]或者su-l[用户名][ec2@ip-10-10-5-79~]$suxiaozhou用户组在Linux系统中,每个用户都有一个归属(用户组

    2022年5月29日
    51
  • 比特币挖矿客户端_IPFS挖矿与比特币挖矿有什么区别?IPFS和比特币之间的爱情故事!…[通俗易懂]

    IPFS挖矿与比特币挖矿有什么区别?IPFS和比特币之间的爱情故事!  文件币主网启用后,每个人都对文件币充满热情,无论是行业人士还是非行业人士。  但是,许多人不熟悉文件硬币挖掘的原理。因此,我认为文件硬币挖掘类似于比特币挖掘。实际上,以前的两个采矿原理有很大不同。我今天会解释。   IPFS挖矿与比特币挖矿有什么区别?IPFS和比特币之间的爱情故事…

    2022年4月14日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号