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

多维数组转化为一维数组_数组的大小长度可以改变吗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);
}

 

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

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

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


相关推荐

  • 第五章《函数》

    第五章《函数》

    2021年5月28日
    119
  • 周鸿祎的真经「建议收藏」

    周鸿祎的真经「建议收藏」  什么样的产品易获风险投资商的青睐-周鸿祎的BLOG-搜狐博客 无论如何,产品还是企业最核心最根本的东西。产品决定了创业者选择一条什么样的发展道路。产品的定义和选择是创业的开始,而好的开始是成功的一半。 做一份投资计划书-周鸿祎的BLOG-搜狐博客 一份好的投资计划书,不仅有助于将创业者头脑中的创意、想法逻辑化

    2022年7月26日
    11
  • 打造自己的ip代理池

    打造自己的ip代理池在爬虫时经常需要使用代理,于是我爬取了一个可以免费提供代理的网址,从中获取免费代理,从而打造属于一个自己的代理池。如图所示,这是网址的界面展示,我们需要做的就是需要其中的ip、port列中的数据,获取数据后需要我们拼接成一个完整的IP然后保存即可,代码如下:importrequestsfromlxmlimportetreeimportosurl=’https://www.kuaidaili.com/free/inha/3/’headers=…

    2022年5月31日
    59
  • 使用 parted 对单个磁盘进行分区并进行配额「建议收藏」

    使用 parted 对单个磁盘进行分区并进行配额「建议收藏」文章目录1.实验要求2.实验步骤3.我的一次实验步骤1.实验要求虚拟机新增一个硬盘,大小大于10G,使用parted工具对磁盘进行分区,分区类型为ext4对新增分区设置磁盘配额,限制lisi用户最多允许使用200M的容量大小并最多允许创建10个文件2.实验步骤准备一个新虚拟机,我们用新环境进行实验VMware添加一块20G硬盘echo”—“>/sys/class/scsi_host/host0/scan#扫描主机fdis

    2022年8月11日
    9
  • HTML页面背景图片平铺

    HTML页面背景图片平铺body{ background-image:url(‘图片路径’);background-size:100%;background-repeat:no-repeat;}

    2022年6月3日
    35
  • fcos调研

    fcos调研有权重 https github com tianzhi0549 FCOS 这个有测试代码 https github com Stick To Object Detection API Tensorflow 介绍的 https blog csdn net qiu article details

    2025年8月12日
    2

发表回复

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

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