关于动态内存分配和数组的选用(变长选malloc,定长选数组)

结论在最后,可直接看最后。

工作中遇到了一个这样的问题。

需要在 一个结构体后面 绑定一个变量,但不能对原结构体进行修改。

比如说:

Struct ss{

Int a;

Char b;

Float c;

};

在这个结构体内部不变的情况下,需要在其后绑定一个 double  d的变量。API的入口参数不变,要求在API内部进行绑定。

 

我最开始的思路是:

这个问题需要考虑的是,要在原结构体的尾部,增加字节,以便绑定信息。所以,很容易就想到mallorealloc。最后选用malloc。先分配足够大小的动态内存,然后将得到的地址指向原结构体。紧接着偏移sizeof(原结构体)的大小,赋值d。这样就拼接成了一个新的结构体。

 

很快就完成了这个函数的更改,测试通过。

 

报告上司,很快过来查看代码。看看了,问我:“malloc是干嘛的?”我:“啊?动态内存分配啊” 问:“你知道什么时候采用动态内存分配么?”我:“额,。。。。。。”。老大说:“动态内存分配,肯定是变长的时候使用。咱们现在这个改动属于固定长度,所以,动态内存分配不是最好的一种选择。” “那,,用数组?”我脱口而出道。 老大看了看我说:“对。并且为了代码可读性,你应该在定义一个结构体,比之前结构体多一个变量定义。然后,直接对其赋值就ok了,这样,后面维护的人看到你的代码也会更清晰明白。”我若有所思的点了点头,说:“立马就修改!”

 

 

所以,动态内存和数组的选用,很好理解。

1:当变量长度是变长的时候,最好使用动态内存分配。

否则,用数组申请,小了,不够用。大了,浪费空间。

2:当变量长度是定长的时候,最好使用数组来申请连续空间的内存。

    动态内存也可以,但会浪费堆栈资源,效率没有数组高。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值