自定义类型、动态内存

自定义类型、动态内存,第1张

自定义类型、动态内存

位段:

struct A{ int _a:2; int _b:5; int _c:10; int _d:30;};


int 是开辟空间的字节数4

:后的数字时变量所占比特位的多少

当第一个开辟空间够用是下一个不会开辟第二个空间

比如本题就只开辟了两个int的空间占8个字节. 32个比特位

位段的内存分配
位段的成员可以是 int unsigned int signed int 或者是 char (属于整形家族)类型
位段的空间上是按照需要以4个字节( int )或者1个字节( char )的方式来开辟的。
位段涉及很多不确定因素,位段是不跨平台的,注重可移植的程序应该避免使用位段。

联合体:

联合体大小的计算
联合的大小至少是最大成员的大小。
当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。
比如

union Un1{ char c[5]; int i;};//大小为8union Un2{ short c[7]; int i;};//大小为16


第一个因为char a[5]是char类型他的对齐数为1 int类型的对齐数为4

原本他们共用同一份空间大小为5

但联合体大小要对齐到最大对齐数的整数倍及4的整数倍8.

第二个同理

short类型的对齐数为2 int类型对齐数为4

原本公用一块内存大小为14(7*2)

但要对齐到最大对齐数的整数倍及4的整数倍还要大于14所以为16

2.动态内存管理

3+1个函数:

申请:malloc、realloc、calloc

释放:free

void *malloc(size_t size),size是申请的空间的大小,单位是字节,返回值是指向申请空间首地址的指针;

void *calloc(size_t num, size_t size),num是所申请类型的数目,size同理

void *realloc(void *p,size _t size),p是申请空间的指针,size同理,如果指针初始化没有空间分配,则realloc作用相当于malloc,如果有,则是重新调整。

重点:所有申请完毕、使用完毕之后,都需要释放,并且把指针置空。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5711332.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存