多维数组转化为一维数组_数组的大小长度可以改变吗

多维数组转化为一维数组_数组的大小长度可以改变吗allocaalloca是GNUlibc中的内存分配函数。voidfunc(){void*p=alloca(size);//dosomethingusingp//…}一般来说,alloca的内存是在调用alloca的函数func的栈上分配的,当func返回或者异常退出的时候,分配的内存或自动释放。以上说的是一般的情…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

alloca

alloca 是GNU libc中的内存分配函数。

void func()
{
    void* p = alloca(size);
    // do something using p
    // ...
}

Jetbrains全家桶1年46,售后保障稳定

一般来说,alloca 的内存是在调用alloca的函数func 的栈上分配的,当func 返回或者异常退出的时候,分配的内存或自动释放。

以上说的是一般的情况。下面说说不一般的情况:

    在HP-UX 系统上时,或者在其他的一些系统并且使用c++ 编译器时。在这些系统上,alloca是基于malloc的模拟。这种模拟并不会在func 返回时立马释放内存,而是在下一次调用alloca的时候才会释放。

    需要注意的是,GCC 3.1 and 3.2可以把调用alloca的调用者 func 给内联。当这种情况发生时,alloca申请的内存直到func的调用者FUNC 返回的时候才会释放。就像下面那样:



void FUNC()
{
    // some code...
    func();
}

如果 在FUNC 循环调用func ,像下面这样,

void FUNC()
{
    for(int i = 0; i < 9999999; i++)
    {

        func();
    }
}

很容易造成栈溢出。

为了防止栈溢出,可以使用一下属性来禁止func 内联

#ifdef __GNUC__
__attribute__ ((__noinline__))

 

VLA

VLA 全称是variable-leng array ,是C99的标准,当时在C11却已到了GCC的语言拓展中。

一般来说,在C语言中,声明数组的时候,需要用一个常量指定数组的长度。

就像下面这样

int array1[16];
const int arr2Len = 32;
int array2[arr2Len];

但是,有了VLA 之后,我们可以向下面这样动态指定数组的长度

float read_and_process(int n)
{
    float vals[n];

    for (int i = 0; i < n; ++i)
        vals[i] = read_val();

    return process(n, vals);
}

 

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/223046.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • linux设置定时关机命令,linux定时关机命令是什么?

    linux设置定时关机命令,linux定时关机命令是什么?linux定时关机命令是什么?在之前的教程中,我们分享了win7系统定时关机命令的使用方法,给网友们带来了不少的便利。也有网友使用的是Linux系统,因此,他们好奇:Linux系统的定时关机命令跟win7系统的一样吗?Linux系统定时关机的命令是什么?在今天的教程中,我们就简单了解一下同样的功能在linux下使用shutdown命令和在Windows下使用shutdown命令的不同。系统关机1….

  • c# 字典树_c++树的遍历

    c# 字典树_c++树的遍历c#入门Trie基于SortedDictionary添加查询非递归实现递归实现前缀基于SortedDictionary添加查询非递归实现递归实现前缀publicclassTrie{privateclassNode{publicboolIsWord;publicSortedDictionary<char,Node>Next;publicNode(boolisWord)

  • eclipse配置插件(eclipse安装反编译插件)

    最近大一刚学习Java,编译器用的eclipse,实验中又需要画类图,所以用到了这个插件,写出来给各位菜鸟们参考……一、安装GEF插件1、打开eclipse官网https://www.eclipse.org/ 2、点击Projects,搜索GEF,然后看到GEF项目点击旁边的download(现在的地址是这个:https://projects.eclipse.org/projects/t…

  • 参加 CSDN 2009 英雄大会有感(一)

    参加 CSDN 2009 英雄大会有感(一)

  • 数仓分层ods_跨境电商国内中转仓

    数仓分层ods_跨境电商国内中转仓一、ods层介绍1、保持数据原貌不做任何修改,起到备份数据的作用。2、数据采用LZO压缩,减少磁盘存储空间。100G数据可以压缩到10G以内。3、创建分区表,防止后续的全表扫描,在企业开发中大量使用分区表。4、创建外部表,在企业开发中,除了自己用的临时表,创建内部表外,绝大多数场景都是创建外部表。二、用户行为数据1、启动日志表ods_start_log//创建启动日志…

  • ajax最常见的几种面试题

    ajax最常见的几种面试题1,什么是ajax?请谈一下你对ajax的认识AJAX是“AsynchronousJavaScriptandXML”的缩写。他是指一种创建交互式网页应用的开发技术。ajax包含下列技术:基于web标准XHTML+CSS表示;使用dom进行动态显示及交互;使用xml和xslt进行数据交换及相关操作;使用xmlhttprequest进行异步数据查询,检索;使用Java…

发表回复

您的电子邮箱地址不会被公开。

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