小编Ddy*_*pia的帖子

有没有办法在 C 中从左侧缩小内存分配而不复制数据?

据我所知,C 标准库允许通过使用 realloc 函数来调整内存分配的大小,如下例所示:

char *a = malloc(10);
char *b = realloc(a, 8);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,a 和 b 可能相等,并且分配已有效地从右侧缩小了两个字节。

但是,我想知道是否有办法从左侧缩小内存分配,如下所示:

char *a = malloc(10);
char *b = /* ... */;  // shrink a from the left by 2 bytes
Run Code Online (Sandbox Code Playgroud)

其中(a + 2) == b、 以及 a 开头的原始 2 个字节现在可供分配器使用。这应该发生,而无需将数据复制到内存中的新位置。只需缩小分配即可。

我知道使用 realloc 从右侧缩小内存或手动将数据复制到新的较小分配可能是一种选择,但这些方法不适合我的需求。

有没有办法使用 C 的标准库或提供此功能的任何其他库来实现此目的?

我并不是要求 100% 的保证,realloc 也可以返回指向不同位置的指针,但很可能会。

预先感谢您的见解。

我可以将所有字节向左移动并尝试缩小,但这涉及复制。

c realloc alloc

2
推荐指数
1
解决办法
185
查看次数

标签 统计

alloc ×1

c ×1

realloc ×1