K& R中的指针加法

时间:2016-03-12 19:19:45

标签: c malloc

在K& R的malloc()程序中,第187页:

 p->s.size -= nunits;
 p += p->s.size;
 p->s.size = nunits;

第一次改变p大小的调用也改变了它在容器指针prevp中的大小。添加地址后,第二次调用仅更改p的大小。 + =操作是否创建了一个p的副本,可以在不改变初始p的情况下进行操作?

2 个答案:

答案 0 :(得分:1)

整个想法是重用以前释放的块。已检查块的大小大于nunits(函数nbytes的参数加上一些开销)

{% form_theme form 'my.form.twig' %}
....
{{ form_widget(form.transport_selection) }}

e.g。

释放的块有100个字节,nunits是60个字节,因此我们想要使用该块的60个字节,并将40个字节留给另一个malloc。

首先我们将剩余大小更改为40(p-> s.size = 40) 然后我们将指针向前移动40个字节(那些40个保持空闲) 现在p指向我们将返回的块的开始,现在我们设置已分配块的大小(p-> s.size = 60)

答案 1 :(得分:0)

  

+=操作是否会创建可以操作的p副本   不改变最初的p

答案:。例如,在p += some_value中,+=运算符等同于p = p + some_value。使用+=时,您将始终更改左值。否则会导致+=运算符无意义。