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

多维数组转化为一维数组_数组的大小长度可以改变吗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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • settings官方网站_phpstorm中文

    settings官方网站_phpstorm中文setting —> php,选择php版本,并点击…,选择到php.exe进入到appserv底下找到php.ini文件,查找date.timezone,去掉前面的;号,添加”Asia/Shanghai”重启appserv环境,就是重启下apache 和 mysql服务发现依然失败后面重启电脑就可以了哈哈哈哈哈哈哈哈…

    2022年8月18日
    21
  • IP地址划分[通俗易懂]

    IP地址划分[通俗易懂]IP地址划分1IP地址分类(1)A类IP地址一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围:1.0.0.1——126.255.255.254二进制表示为:00000001000000000000000000000001——01111110111111111111111111111110可用的A类网络有126个,每个网络能容纳…

    2022年6月11日
    51
  • EXACT函数_excel中的exact函数

    EXACT函数_excel中的exact函数EXACT函数:EXACT函数是一个文本函数,通过这个函数可以将不同的字符串进行对比,通常用于信息核对。EXACT函数的功能:比较两个字符串是否一致,返回不同的结果。EXACT函数的语法结构:EX

    2022年8月2日
    6
  • vsftp简介[通俗易懂]

    vsftp简介[通俗易懂]一、简介FTP(文件传输协议)全称是:VerySecureFTPServer。Vsftpd是linux类操作系统上运行的ftp服务器软件。vsftp提供三种登陆方式:1.匿名登录2.本地用户登录3.虚拟用户登录vsftpd的特点:1.较高的安全性需求2.带宽的限制3.创建支持虚拟用户4.支持IPV65.中等偏上的性能6.可分…

    2022年9月24日
    4
  • c# mysql executenonquery_c#数据四种执行方法(ExecuteNonQuery)—–转载「建议收藏」

    c# mysql executenonquery_c#数据四种执行方法(ExecuteNonQuery)—–转载「建议收藏」c#数据四种执行方法(ExecuteNonQuery)1.使用ExecuteReader()操作数据库2.使用ExecuteNonQuery()操作数据库3.使用ExecuteScalar()操作数据库4.使用DataSet数据集插入记录,更新数据一、使用ExecuteReader()操作数据库,执行查询操作的非常好的方法。ExecuteReader比DataSet而言,DataReader具有较…

    2025年8月29日
    5
  • 关于后端代码的总结_辐射4最强防具代码

    关于后端代码的总结_辐射4最强防具代码JavaScript是脚本语言,是一种解释性脚本语言(代码不进行预编译)

    2022年10月20日
    3

发表回复

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

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