【C语言】数组太大了程序总崩溃怎么办

作者: 沙猪教写程序分类: 校园学习 发布时间: 2024-01-24 16:16:18 浏览:13446 次

【C语言】数组太大了程序总崩溃怎么办

我不是陈志锐:
在主函数外面开可以开很大,而且初值都是0,不知道啥原理

【回复】数组在主程序外会自动初始化,而且没有垃圾数据,俭省内存,所以数组比较大的时候都建议把数组定在主程序外。
设计师聪哥:
你这视频其实就是讲的C语言中手动和自动内存获取的区别,像数组这种属于自动类型的内存获取,自动类型的内存获取的时间可能会因为编译器的优化不同,造成时间上的不同,而malloc这种“手动分配”的内存机制是非常迅速的编译之后的程序在系统的调度后获取的内存,肯定时间更短。

LANSGANBS:
#ifdef ONLINE_JUDGE constexpr int N = 1e5 + 7; #else constexpr int N = 1e3 + 7; #endif 然后扔给评测机[doge]

可乐der加冰:
什么,你要我MCU开100万?MCU:你杀了我吧[笑哭]

_心所向_:
malloc完别忘记free啊 不然容易内存泄露[妙啊]

盖大喵家的老王:
栈还得悠着用,堆上面malloc一下[笑哭][笑哭][笑哭]

【回复】回复 @叫声是哔哔哩 :那你就去写你的单引号去吧。
【回复】回复 @生机盎燃蘑菇灰 :程序运行结束或超出作用域不就自动释放吗?还是说我用的Rust语言不担心这些问题?
namestd:
注意:代码最后一定要free,//free(ptr); 不然会使申请的内存无法释放,任何程序无法使用其内存(操作系统也不行,只能重启【关掉程序是没有用的】)

【回复】回复 @namestd :关掉程序会自动释放的,而且哪怕是Linux的僵尸进程也不会占用内存。就算不关闭,操作系统也依然能够读取和写入这块内存,所以说不是不能使用,是操作系统一般根本不会去使用,使用的例子就比如内存不够时操作系统为了保障自身运行会去杀进程
【回复】白学了,操作系统有内存管理的,会自动释放
【回复】回复 @猫娘Philia :@手感不好的专家级人机
不朽的月桂醇:
stack size 就是Linux下对于一个程序所使用的栈空间的限制,它是可以被修改的

火锅味吧只因:
还有一个比较不好的解决方案放到全局去声明[doge]

T850聊天终结者:
要么开全局,要么用malloc,这两个都是开在堆上的。如果要动态的那就手搓链式存储(可以用红黑树优化查询效率,但是比不过一维数组的随机访问效率高)。一般在算法竞赛中,如果适用数组一般都是全局开1e+5的左右的长度(也就是100万左右)

【回复】全局变量不在堆区,未初始化的变量或初始化为0的在bss段,有初始化的在data段,都不在堆上。
一只beta鱼:
在给Arduino编程的时候看到了一个帖子,不知道这样修改有没有用[吃瓜]

怯默吾声:
中学时就知道啦,哈哈。所谓的大数组看起来大,其实很小。 那时候一直想用内存直接保存屏幕图案,所以创建数组。实际上一个1920*1080的屏幕,想像素级别保存,就要6百万字节了。 创建这么大的数组没有一个编译器能成功的。 最后尝试malloc才成功,只是那时候不明白为什么前者失败,后者能成功。

计算机 C语言 程序 编程 经验分享 数组 大学生寒假生活 必剪创作

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!