realloc 如何增加内存块的大小?
How does realloc work regarding increasing size of memory blocks?
那么 realloc 如何(以及是否)增加此循环中指向的内存。
char* buffer = malloc(sizeof(char));
ssize_t size = 0;
while(true)
{
//increment size;
size++;
// increment buffer_inc memory size by size (one byte at a time)
buffer = realloc(buffer, size);
......
当我 运行 这个时,我得到我的初始 sizeof(buffer)
是 8
并且在循环之后,我的大小仍然是 8
不应该是 9
?
奇怪的是,即使我这样做 buffer = realloc(buffer, size + sizeof(char);
我仍然得到我在 sizeof(buffer)
上的值(在循环之后)是 8
我是否遗漏了一些关于 realloc 如何工作的东西?在我的理解中,它分配了更多的内存,size_t size
(作为第二个参数传递)用于 void* ptr
(作为第一个参数)传递的内存。
我是不是误解了 realloc 的工作原理?
问:我是否误解了 realloc 的工作原理?
答:没有,但是你误解了你在打印什么!
您正在打印 指针的大小。
So, for a 32bit computer, the pointer size can be 4 bytes; 64bit computers can have 8 bytes. Or, a 64bit computer running a 32bit OS will have 4 bytes. Still, under a specific architecture, all types of pointers (void*, int*, char*, long* etc) will have same size (except function pointers).
检查这个例子:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char* buf1 = malloc(sizeof(char));
printf("buf1 = %zu\n", sizeof(buf1));
char* buf2 = malloc(1000 * sizeof(char));
printf("buf2 = %zu\n", sizeof(buf2));
return 0;
}
输出:
gsamaras@gsamaras:~/Desktop$ ./a.out
buf1 = 8
buf2 = 8
您无法打印分配了多少内存。 程序员有责任 跟踪他分配的内存,方法是保留一个额外的变量,在您的示例中 size
。
你没有误会realloc
。你误会了sizeof
.
sizeof(buffer)
是指针的大小(对你来说似乎是 8),而不是它指向的缓冲区的大小。你必须自己跟踪分配的大小。
那么 realloc 如何(以及是否)增加此循环中指向的内存。
char* buffer = malloc(sizeof(char));
ssize_t size = 0;
while(true)
{
//increment size;
size++;
// increment buffer_inc memory size by size (one byte at a time)
buffer = realloc(buffer, size);
......
当我 运行 这个时,我得到我的初始 sizeof(buffer)
是 8
并且在循环之后,我的大小仍然是 8
不应该是 9
?
奇怪的是,即使我这样做 buffer = realloc(buffer, size + sizeof(char);
我仍然得到我在 sizeof(buffer)
上的值(在循环之后)是 8
我是否遗漏了一些关于 realloc 如何工作的东西?在我的理解中,它分配了更多的内存,size_t size
(作为第二个参数传递)用于 void* ptr
(作为第一个参数)传递的内存。
我是不是误解了 realloc 的工作原理?
问:我是否误解了 realloc 的工作原理?
答:没有,但是你误解了你在打印什么!
您正在打印 指针的大小。
So, for a 32bit computer, the pointer size can be 4 bytes; 64bit computers can have 8 bytes. Or, a 64bit computer running a 32bit OS will have 4 bytes. Still, under a specific architecture, all types of pointers (void*, int*, char*, long* etc) will have same size (except function pointers).
检查这个例子:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char* buf1 = malloc(sizeof(char));
printf("buf1 = %zu\n", sizeof(buf1));
char* buf2 = malloc(1000 * sizeof(char));
printf("buf2 = %zu\n", sizeof(buf2));
return 0;
}
输出:
gsamaras@gsamaras:~/Desktop$ ./a.out
buf1 = 8
buf2 = 8
您无法打印分配了多少内存。 程序员有责任 跟踪他分配的内存,方法是保留一个额外的变量,在您的示例中 size
。
你没有误会realloc
。你误会了sizeof
.
sizeof(buffer)
是指针的大小(对你来说似乎是 8),而不是它指向的缓冲区的大小。你必须自己跟踪分配的大小。