0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

程序中内存应该如何分配?怎样进行动态内存分配?

Q4MP_gh_c472c21 来源:未知 作者:易水寒 2018-08-12 10:52 次阅读

程序在内存中是分段存储的。

代码段:存放语句转换的数字;程序运行时不可修改;全局段:用来记录全局变量和静态变量的存储位置;不会随着程序的运行而改变;栈:存放局部变量,块变量,形式参数和返回值的存储位置;随着程序的运行其大小将不断改变;函数调用时,开辟空间,函数调用结束收回其空间;不同调用函数之间遵循后进先出的原则。堆:存放动态分布的存储位置;

一:传统数组(静态数组)的缺点

1:数组的长度必须事先指定,并且是常整数,不能是变量 int a[5];2:传统数组程序员无法由程序员释放,只能由系统释放。(并且只能在数组所在函数结束才能释放)3:数组的长度在函数运行期间不能动态的扩充和缩小4:A函数定义的传统数组,在A函数结束时,在B函数中是不能使用的,因为已经释放。也就是传统数组不能跨函数。

区分:静态存储与内存的静态开辟

二:为什么要动态分配内存

用来解决传统数组的四个缺陷

三:动态内存分配举例,以及动态数组的构造

方式:malloc函数,在堆开辟空间

1:malloc是由程序员在堆栈动态开辟空间2:返回值开辟空间的首地址,但是类型是void *,需要强制类型转换3:分配的内存空间应该能整除类型所占的字节数4:包含头文件malloc.h5:只能用free(p)来释放p所指向的动态开辟的内存空间。6:对动态内存空间的操作,用*p来操作。7:可以用多个指针指向这个动态空间8:当有多个指针只向这个动态空间时,只能用free一个指针,多次重复释放要被报错9:可以将动态开辟的的内存指针作为函数参数

问题:p的分配类型是动态的还是静态的?当调用free(p)后,p的内存空间会被释放么?例子:动态构建一个一维数组:

动态扩充数组的长度,也就是在程序运行时动态扩充:realloc(首地址,总共字节数)作用:将原来动态开辟的动态内存重新开辟一个字节数,如果这个数比以前的大,前面的数据保存。如果比原来的小,保留前面的数据。

注意:扩充或者缩放的内存单元是新开辟的内存单元。这个过程中有值的拷贝过程。返回值是新开辟的地址空间首地址。

四:静态内存和动态内存的比较

静态开辟的内存:在栈中开辟,由编译器分配,由系统自动释放动态开辟的内存:在堆中开辟,由程序员开辟,由程序员自动释放。

五:跨函数使用内存的问题

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2760

    浏览量

    72692
  • 程序
    +关注

    关注

    114

    文章

    3629

    浏览量

    79495
  • 代码
    +关注

    关注

    30

    文章

    4552

    浏览量

    66642

原文标题:谈谈内存分配与动态内存分配

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    动态内存管理模块的设计原理与实现

    Fense 通过设立一个双向链表(struct Head *stHead)来保存所有被分配动态内存块的信息。链表中的每个节点对应一个动态内存块,节点中包括此内存大小、
    的头像 发表于 06-30 08:05 2110次阅读
    <b class='flag-5'>动态内存</b>管理模块的设计原理与实现

    C语言知识总结:动态内存分配

    动态内存分配就 是指在程序执行的过程中动态分配或者回收存储空间的分配
    发表于 10-24 15:52 651次阅读

    使用C语言实现简单动态内存分配

    首先要明白为何需要动态内存分配,熟悉C语言的读者应该对这个比较熟悉,需要一段内存时会使用malloc函数来申请所需要大小的内存,函数返回一段
    发表于 07-28 16:26 382次阅读
    使用C语言实现简单<b class='flag-5'>动态内存</b><b class='flag-5'>分配</b>

    C语言程序设计中动态内存分配如何实现

    C语言程序设计中,动态内存分配如何实现,需要注意哪些问题?
    发表于 09-28 16:53 841次阅读

    内存动态内存分配实现

    第27章 STM32H7的TCM,SRAM等五块内存动态内存分配实现本章教程为大家分享一种DTCM,SRAM1,SRAM2,SRAM3和SRAM4可以独立管理的动态内存管理方案,在实
    发表于 08-03 07:14

    如何分配STM32H7TCM,SRAM等五块内存动态内存

    如何分配STM32H7TCM,SRAM等五块内存动态内存
    发表于 10-13 07:23

    怎样去定义CDC所需要的动态内存分配函数呢

    为什么使用动态内存分配的CDC驱动自动生成的代码不能正常工作呢?怎样去定义CDC所需要的动态内存分配函数呢?
    发表于 12-06 07:04

    嵌入式C语言动态内存分配

    动态内存分配:1、malloc、memset、free在日常写代码时需要注意以下几点:malloc分配内存时,需要 if语句 判断malloc是否成功
    发表于 12-14 06:37

    请问使用动态内存分配安全吗?

    想在C语言程序员之间开始一个激烈的,或者说有争议的讨论很简单,只需要问:“使用动态内存分配安全吗?”使用动态内存分配安全吗?在C语言
    发表于 12-15 06:10

    使用动态内存分配安全吗

    安全吗?”为了更加安全稳定,美国军方禁止在C语言程序中使用malloc()使用动态内存分配安全吗?在C语言程序开发
    发表于 12-15 07:44

    动态内存分配是什么意思

    所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程动态分配
    发表于 12-17 08:17

    RTThread的动态内存空间该如何去分配

    的Heap_Size,而使用rt_malloc申请到的则是RTT分配的空间然后有以下几个问题1、如果是动态创建线程,那线程的局部变量是位于RTT分配
    发表于 08-31 14:34

    动态内存分配举例,以及动态数组的构造

    1:malloc是由程序员在堆栈动态开辟空间 2:返回值开辟空间的首地址,但是类型是void *,需要强制类型转换 3:分配内存空间应该
    的头像 发表于 07-10 16:41 6968次阅读
    <b class='flag-5'>动态内存</b><b class='flag-5'>分配</b>举例,以及<b class='flag-5'>动态</b>数组的构造

    嵌入式中需要用到动态内存

    所谓动态内存分配(Dynamic Memory Allocation)就是指在程序执行的过程中动态分配或者回收存储空间的
    的头像 发表于 07-27 08:11 2857次阅读

    静、动态内存的优劣比较

    动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时
    的头像 发表于 08-06 18:25 6121次阅读