栈上分配存储器的方法 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • visual studio创建数据库_读取硬件安装信息

    visual studio创建数据库_读取硬件安装信息管理类是WMI类,如Win32_LogicalDisk,,该类型可表示一个磁盘驱动器,并Win32_Process,,它表示的进程Notepad.exe等。在.NET的项目中,有时候需要获取计算机的硬件的相关信息,在C#语言中需要利用ManagementClass这个类来进行相关操作。以上是对ManagementClass类的部分谁明,此类型的所有公共静态成员都是线程安全的。以上的获取硬件信息的方法可以直接封装在一个类中,可以在项目中直接引用,这样可以加快项目的开发速度。…

    2022年10月2日
    3
  • 线性探测再散列

    线性探测再散列哈希表又称散列表。哈希表存储的基本思想是:以数据表中的每个记录的关键字k为自变量,通过一种函数H(k)计算出函数值。把这个值解释为一块连续存储空间(即数组空间)的单元地址(即下标),将该记录存储到这个单元中。在此称该函数H为哈函数或散列函数。按这种方法建立的表称为哈希表或散列表。处理冲突的方法:开放寻址法:Hi=(H(key)+di)MODm,i=1,2,…,k(k<=…

    2022年5月15日
    51
  • 最中肯的Redis规范全在这了

    最中肯的Redis规范全在这了

    2022年2月14日
    37
  • 模型评估之混淆矩阵

    模型评估之混淆矩阵在前面的文章中我们讲到了回归模型和分类模型的评估指标,区分了准确率和精确率的区别,并且比较了精确率和召回率内在的联系。本篇文章我们再来学习另外一个评估方法,即混淆矩阵(confusion_matrix)。在讲矩阵之前,我们先复习下之前在讲分类评估指标中定义的一些符号含义,如下:TP(TruePositive):将正类预测为正类数,真实为0,预测也为0 FN(FalseNegative):将正类预测为负类数,真实为0,预测为1 FP(FalsePositive):将负类预测为正类数,真实为

    2022年5月14日
    40
  • git 修改ssh端口

    git 修改ssh端口SSH 默认端口为 22 而 Git 的访问是基于 SSH 的 通常我们会更改服务器的 SSH 端口号 即当 SSH 的端口不是 22 上时 Git 访问会出现 ssh connecttohos comport22 Connectionti Theremoteend 无论客户端是在 windows 还是 Linux 配置访问的

    2025年7月31日
    2
  • c++输入输出流

    输入输出流类关系图iostream头文件中4种流对象1.cout流在内存中对应开辟了一个缓存区,用来存放流中的数据,当向cout流插入一个endl时,不论缓冲区是否已满,都立即输出流中的所有数据

    2021年12月19日
    60

发表回复

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

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