c17.联合体,内存管理

  1. 联合体:共享内存,对同一块内存 采取不同类型进行解释

           c17.联合体,内存管理有名的联合体变量

    c17.联合体,内存管理

          c17.联合体,内存管理哑元结构,x为哑元结构定义的结构体变量

   c17.联合体,内存管理加typedef之后,x为类型名

       c17.联合体,内存管理

 

         .%c打印出来为a,b

      0000 0010 0000 0001      短整型的高位和低位

                  512     +        1=513

      若%d打印,513

      c17.联合体,内存管理

 

     union UnData 定义一个联合体

      Union UnData x 定义一个联合体变量

      st,cs共享同一个空间,高位数放在高地址,低位数放在低地址,0x为16进制,12放高地址,34放低地址

  c17.联合体,内存管理

 

 x.addr分配四个空间,s1,s2,s3,s4共同分配一个空间

c17.联合体,内存管理

 

 

联合体可以套结构体,结构体可以套联合体

 

union IP Node x;中只能定义addr,

 

不能定义CHAR s1,s2,s3,s4,这个为内部类型,并不为联合体开辟空间,若要用,则定义IPNode::CHAR y;这时y由y.s1  y.s2.......构成

 

c17.联合体,内存管理

 

 

哑元定义的结构体变量,x.addr和x.CHAR共享空间,x.CHAR.s1.....进行使用

c17.联合体,内存管理

 

哑元结构,一个结构为addr,一个为哑元结构,哑元结构的成员作为整体和addr共享空间,和上一个哑元结构分配一致,此哑元结构没有名字 可用x.addr  x.s1.....进行使用

c17.联合体,内存管理

printf:格式化字符串输出到屏幕

sprintf :格式化字符串输出到buff

c17.联合体,内存管理

将float 型转换为字符串放入到buff,

2.

当程序运行时,栈空间的大小为1M,当程序运行时开辟的空间过大,就会发生溢出

当程序运行时,加载的是用户空间,用户空间是代码区,数据区,堆区,栈区,栈区在需要的时候通过malloc进行申请,不要的时候进行释放,这种情况在程序运行的时候办到,所以称为动态运行管理。

1)动态内存分配函数:malloc,calloc,realloc,free 需要引用stdlib.h或malloc.h

   返回类型为无类型,分配size字节并没有初始化,

释放之后,要把指针置为空

c17.联合体,内存管理

堆区称为*区

.stack 栈区  .heap  堆区

 free之后把标识域置为零,p向下走时为失效指针,失能指针,因为这部分空间已经还给系统了

p释放后紧接着把p置为空

 通过malloc申请,用完之后一定要通过free 释放

通过malloc申请时,堆区并未初始化,为随机值

 

 

 

 

                                                                                                                                                                                                                                                                   

 

上一篇:嵌入式100题(016):new和malloc的区别


下一篇:C++ malloc()和free()函数的理解