堆空间

  1 #include<stdio.h>
  2 #include<stdlib.h>
  3 
  4 typedef unsigned short int uint16;
  5 typedef struct date{
  6         uint16 year;
  7         uint16 month;
  8         uint16 day;
  9 }date;
 10 void print(date const *p)
 11 {
 12         printf("%d年,%d月,%d日, ",p->year,(*p).month,(*p).day);//(*p). = p->
 13 }
 14 int main()
 15 {
 16         date b[3] = {{2010,8,13},{2012,12,31},{2011,4,12}};
 17         int i;
 18         for(i = 0;i<3;i++)
 19                 print(&b[i]);
 20         printf("\n");
 21 
 22         double* p = (double*)malloc(sizeof(double)); 

23         int *a = calloc(5,sizeof(int));

 24         printf("p = %p,a = %p,\n",p,a);
 25 
 26         *p = 123.45;
 27 
 28         for(i = 0;i<5;i++)
 29                 a[i] = i+10;
 30         printf("%g\n",p);
 31         for(i = 0;i<5;i++)
 32                 printf("%d ",a[i]);
 33         printf("\n");
 34         free(p);
 35         a = realloc(a,sizeof(int)*10);
 36         if(a == NULL)
 37         {
 38                 printf("空间申请失败\n");
 39                 return 1;
 40         }
 41         for(i = 0;i<10;i++)
 42                 printf("%d ",a[i]);
 43         printf("\n");
 44         a = realloc(a,0);
 45         return 0;
 46 }
 47 //在C语言中传递结构变量时总是传递地址
STM32微控制器内部并不直接提供用户访问物理内存的方式来分配所谓的“空间”;因此,谈论STM32的“空间大小”并没有直接意义。不过,我们可以通过了解STM32的资源分配、内存管理和编译选项来理解如何管理内存。 在STM32项目,程序员通常会在自己的应用代码负责内存的分配和释放。为了有效管理内存,尤其是用于动态内存分配的部分(即通常所说的""),常用的策略包括: 1. **手动内存管理**:在需要的时候动态地分配内存,并在不再使用时显式地释放它。这需要开发者有良好的内存管理习惯,避免内存泄漏。 2. **使用预分配的静态数组**:对于已知大小的数据结构,可以预先分配足够的内存空间,避免频繁的内存申请和释放操作。 3. **使用RTOS或其他并发工具**:实时操作系统(RTOS)如FreeRTOS、X-Ware等通常提供内建的内存管理机制,允许更高效地管理内存并减少了程序员手工管理内存的需求。 4. **heap库函数**:一些IDE或库可能会提供基于STM32的应用程序特定的栈管理功能。例如,在Keil MDK或IAR EWARM等集成开发环境,可能存在自定义的内存管理库,能够更好地适应STM32的应用场景。 关于具体的内存分配量或“空间”,则取决于你的应用程序需求以及所选的开发环境和编译配置。例如,在某些编译设置下,如果你为应用程序指定了较大的空间(如通过编译器选项),那么在运行时就有更多的内存可用于动态分配;反之,则会限制可用的空间,减少可能因缺少内存而导致的错误(如内存溢出)。 考虑到STM32系列芯片资源有限,有效的内存管理尤为重要,不仅是为了性能考虑,也是为了保证系统稳定性和可靠性。在设计内存管理策略时,应充分考虑系统的实际需求、处理器的资源限制以及预期的负载情况。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值