c17.联合体,内存管理
作者:互联网
- 联合体:共享内存,对同一块内存 采取不同类型进行解释
有名的联合体变量
哑元结构,x为哑元结构定义的结构体变量
加typedef之后,x为类型名
.%c打印出来为a,b
0000 0010 0000 0001 短整型的高位和低位
512 + 1=513
若%d打印,513
union UnData 定义一个联合体
Union UnData x 定义一个联合体变量
st,cs共享同一个空间,高位数放在高地址,低位数放在低地址,0x为16进制,12放高地址,34放低地址
x.addr分配四个空间,s1,s2,s3,s4共同分配一个空间
联合体可以套结构体,结构体可以套联合体
union IP Node x;中只能定义addr,
不能定义CHAR s1,s2,s3,s4,这个为内部类型,并不为联合体开辟空间,若要用,则定义IPNode::CHAR y;这时y由y.s1 y.s2.......构成
哑元定义的结构体变量,x.addr和x.CHAR共享空间,x.CHAR.s1.....进行使用
哑元结构,一个结构为addr,一个为哑元结构,哑元结构的成员作为整体和addr共享空间,和上一个哑元结构分配一致,此哑元结构没有名字 可用x.addr x.s1.....进行使用
printf:格式化字符串输出到屏幕
sprintf :格式化字符串输出到buff
将float 型转换为字符串放入到buff,
2.
当程序运行时,栈空间的大小为1M,当程序运行时开辟的空间过大,就会发生溢出
当程序运行时,加载的是用户空间,用户空间是代码区,数据区,堆区,栈区,栈区在需要的时候通过malloc进行申请,不要的时候进行释放,这种情况在程序运行的时候办到,所以称为动态运行管理。
1)动态内存分配函数:malloc,calloc,realloc,free 需要引用stdlib.h或malloc.h
返回类型为无类型,分配size字节并没有初始化,
释放之后,要把指针置为空
堆区称为自由区
.stack 栈区 .heap 堆区
free之后把标识域置为零,p向下走时为失效指针,失能指针,因为这部分空间已经还给系统了
p释放后紧接着把p置为空
通过malloc申请,用完之后一定要通过free 释放
通过malloc申请时,堆区并未初始化,为随机值
标签:malloc,addr,s1,联合体,哑元,内存,空间,c17 来源: https://www.cnblogs.com/xpei-1124/p/14626940.html