高性能单片机堆栈问题

newfish_ 2012-12-13 04:33:22
用的stm32系列的单片机
我刚才看了一下启动代码里设置的堆栈大小,如下:
Stack_Size EQU 0x00000400
Heap_Size EQU 0x00000200
也就是说栈的空间是1024字节,堆的空间是512字节。
为什么我在一个子函数中分配的字符串数组大小已经超过了而没有报错呢?
char *Token1=(char *)malloc(513*sizeof(char));
char *Token2=(char *)malloc(1025*sizeof(char));
...全文
455 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
shinerise 2013-01-16
  • 打赏
  • 举报
回复
你确定你malloc出来的内存是在Heap_Size所对应的空间里?正常情况下malloc如果分配空间不足会返回NULL。你看一下你返回的指针是什么? 另外我感觉写单片机程序的一个需要避免之处就是尽量不用系统的malloc,而是自己根据系统内存的实际使用情况来自定义内存池pool,然后通过block malloc的方式来提高这种函数的运行效率。毕竟,固定按内存池分配的内存管理方式要比按字节管理的方式效率高很多。
cabbage000 2013-01-15
  • 打赏
  • 举报
回复
堆栈不够编译器无法报错,除非你使用分散加载,才可能提醒。你这个编译正确但是运行就harddfault
yisiyou 2012-12-27
  • 打赏
  • 举报
回复
我也想学习学习
kndyc 2012-12-23
  • 打赏
  • 举报
回复
malloc是在堆上分配空间,但是是运行时分配的,编译时可以通过,但是程序运行时就会溢出。
龙飞九天1314 2012-12-23
  • 打赏
  • 举报
回复
我也遇到过这种情况,同问
lr2131 2012-12-23
  • 打赏
  • 举报
回复
对,编译时通过,编译器不会检查边界溢出的,但在运行时可能会出问题也可能不会出问题。
newfish_ 2012-12-22
  • 打赏
  • 举报
回复
char *Token1=(char *)malloc(513*sizeof(char)); char *Token2=(char *)malloc(1025*sizeof(char)); 这两条语句malloc分配的内存应该不是在栈上的。而只是指针变量Toekn1 跟Token2 才分配在栈空间。
zhujinqiang 2012-12-14
  • 打赏
  • 举报
回复
编译通过不等于运行正确.
Binzo 2012-12-13
  • 打赏
  • 举报
回复
没报错,但你能在单片机上运行吗。
lbing7 2012-12-13
  • 打赏
  • 举报
回复
char *Token1=(char *)malloc(513*sizeof(char)); char *Token2=(char *)malloc(1025*sizeof(char)); 这个不是在栈里面分配的吧? 其实:堆是堆,栈是栈 两个不同的东西 :)

27,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧