gpt4 book ai didi

c - 了解 C 中的内存所有权模型

转载 作者:行者123 更新时间:2023-12-03 23:27:42 25 4
gpt4 key购买 nike

我正在阅读 C 中的内存所有权模型,并遇到以下示例来解释 C 中的内存所有权模型。

 void Z(void) {
void *buffer;

while (!is_queue_empty(&queue)) {
buffer = queue_pop(&queue);
// do something useful
free(buffer);
}
}

void Y(void **buffer_p, int function) {
switch (function) {
// lots of cases
default:
enqueue(&queue, *buffer_p);
*buffer_p = NULL; // "claim ownership"
break;
}

}

void X(void) {
void *buffer = malloc(1024 * 1024);

Y(&buffer, 3);
}

有人可以解释一下,当函数 Y 时是什么意思吗?如上所示“声明所有权”?它如何声明所有权?还有设置 *buffer_p = NULL是什么意思内 Y然后再次调用 freeZ ?

最佳答案

在这个例子中,“所有权”意味着谁负责释放分配的内存。使用 malloc 动态分配内存时,该内存的地址应该传递给 free正好一次。

请注意 X传入buffer的地址至 Y允许 Y改变这个变量的值。内部Y ,它将分配的指针复制到队列内存结构中。此时这个结构和buffer X 中的变量包含指向该内存的指针。

如果这就是 Y 中发生的所有事情,那么就会出现这个内存应该释放到哪里的问题。下一行通过分配 NULL 来处理这个问题。到解除引用的参数。本套bufferXNULL ,所以现在 X不用担心这个内存。换句话说,该内存的所有权是从 X 传递过来的。到队列数据结构。

如果你再看 Z ,你可以看到它从队列中拉出一个对象并调用 free在那段内存中。

关于c - 了解 C 中的内存所有权模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60046802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com