你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32+IAR中malloc的使用

[复制链接]
thinkcode 发布时间:2015-3-30 15:05
测试环境:STM32+IAR6.4
9 K; t; s" e5 t' e. _堆区大小设置为0x1000(默认值)。5 L8 M, e/ g2 J4 c$ v
变量定义:
) D' e& }8 ]) Q9 m6 ~( Z7 T     char *p=NULL;5 X0 Y# ]# i7 R7 F; _
     char *p2=NULL;3 w9 U$ ^* i" {, D. F% `4 o6 t
1.  申请内存大小超过设置值5 M' l1 |/ S# s0 P* c
      p = (char *)malloc(sizeof(char)*5090);1 ?. T+ n6 L/ H
     malloc返回NULL,使用这段内存是会出错(硬件错误)。4 N9 d) d6 y. l, Q  ~# c1 r
2.申请两段内存,每段不超过设定值,但总和超过设定值。- J9 O/ O/ j# e' l% H" E9 s
    p = (char *)malloc(sizeof(char)*3090);
% G# s( d4 @# N# d1 ^7 ^/ k. B
$ O  k4 Y& y; z9 w  if(p== NULL)
7 B1 y; O2 @/ a( b- \5 c# r; X3 y  {
; A1 k6 R8 h1 o" z* G7 M    printf("malloc error1\r\n");) ~2 j. e1 t8 U" {2 a
  }
% R" P, F9 E/ H3 K' x( g  p2 = (char *)malloc(sizeof(char)*3090);7 p  M1 {- q( ]( R8 e- G
  if(p2== NULL)
$ \0 `; P& n: {  {
7 }1 e: V, F5 }& k6 c+ ~, {; T- v    printf("malloc error2\r\n");
: ~4 K" _+ G( F6 A  b  }
2 [+ Q* F9 _8 N. m  M  p2为NULL,使用时会出错。0 Z, s$ L# l/ h9 G3 k0 e% L$ s
3.申请一段内存,使用完毕后释放掉,然后再申请一段内存
, L9 J% W) T- f) ^" I     p = (char *)malloc(sizeof(char)*3090);) o: K" h% h; w- r
. f& E) t& C+ h# G1 P6 {3 M( L
  if(p== NULL)
# x  o0 ?' a- B  Q  {8 Y/ w+ v+ }# ]: P
    printf("malloc error1\r\n");
& s, I; b1 q8 i9 h) T2 s. e  }
& `. a4 `7 B$ U- T$ k  ...& K" S* G. p7 ?9 k% q+ k% h
  free(p);+ T/ I! }* z' \9 |1 z% Z) d
  p2 = (char *)malloc(sizeof(char)*3090);, b1 U" ~3 i5 D  k% h- {# {! ~$ a
  if(p2== NULL)
, W4 e* ~$ B* @  {
, r9 }8 ^1 P- K; k0 l    printf("malloc error2\r\n");4 E8 o" A6 o' }6 ^8 `3 Q5 c  p
  }
9 k' K2 U+ K2 ]8 w- `  ...5 Z2 O" \' w0 g/ ?4 z
  free(p2);
- l8 V3 V) {6 d6 g# R! |2 D  使用正常。
  }! N, k& T- F4 o
: A3 d7 b  V0 D+ q- I+ j* Y. G% M$ v/ f( \1 q/ F4 w
  申请内存,使用完毕后要释放。% ^7 ]# n, b2 a- [( O
  IAR设置堆栈大小 option->Linker -> Config -> Override default ->Edit。+ G9 j" c* s5 \4 l
* p& j& }+ y# g5 ?
如有错误,欢迎指正,欢迎拍砖!5 }! R- B; I0 W3 C! W; f
赞 收藏 2 评论7 发布时间:2015-3-30 15:05

举报

7个回答
damiaa 回答时间:2015-3-30 16:12:00
那肯定的。老申请不释放那就用完了。
肖久 回答时间:2015-3-30 16:59:44
不错 不错  
木木鱼 回答时间:2015-3-31 09:06:39
谢谢分享!
stary666 回答时间:2015-3-31 09:29:54
谢谢分享!
小虾丁 回答时间:2017-1-11 09:59:01
请教一个问题,设定堆区的大小后,系统启动的时候不需要作跟堆相关的初始化,就可以调用malloc()函数来分配动态内存吗?
andypanfan 回答时间:2017-1-12 09:18:51
谢谢分享!
ljt8015 回答时间:2018-8-17 20:28:48
直接使用系统malloc会有内存碎片吧?

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版