在K& R的malloc()程序中,第187页:
p->s.size -= nunits;
p += p->s.size;
p->s.size = nunits;
第一次改变p大小的调用也改变了它在容器指针prevp中的大小。添加地址后,第二次调用仅更改p的大小。 + =操作是否创建了一个p的副本,可以在不改变初始p的情况下进行操作?
答案 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
。使用+=
时,您将始终更改左值。否则会导致+=
运算符无意义。