据我所知,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 也可以返回指向不同位置的指针,但很可能会。
预先感谢您的见解。
我可以将所有字节向左移动并尝试缩小,但这涉及复制。