C语言柔性数组

1 概念

struct flexible
{
	int len;
	char data[0];//不计入内存
	//or char data[];
};

结构体中最后一个元素是数组名,不计入内存,即sizeof (struct flexible) = sizeof (int)

2 使用

typedef struct flexible
{
	int len;
	char data[];//不计入内存
	//or char data[0];
}Flexible;


Flexible* getEmptyString(int len)
{
	//sizeof (Flexible) = 4 = sizeof (int)
	(Flexible*) p = (Flexible*)malloc(sizeof(Flexible)+ len + 1);
	p->len = len;
	p->data[len] = '\0';
	return p;
}

3. 与非柔性数组比较

3.1 原来的模型

typedef struct
{
	int len;
	char* data;//计入内存
}Nonflexible;

3.2 原来模型使用

Nonflexible* getEmptyString(int len)
{
	//sizeof (Nonflexible) = 8 if 32 bits computer
	(Nonflexible*) p = (Nonflexible*)malloc(sizeof(Nonflexible));
	p->data = (char*)malloc(len + 1);
	p->len = len;
	p->data[len] = '\0';
	return p;
}

3.3 对比

在这里插入图片描述

  • 只用了一次malloc
  • 而且内存是连续的,减少内存碎片化
  • 网络编程中会使用到柔性数组
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值