redis sds 数据结构如何使用 C realloc函数来动态扩容
2021/10/27 19:40:06
本文主要是介绍redis sds 数据结构如何使用 C realloc函数来动态扩容,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1 系统函数realloc测试
mac OS 系统 函数解释
The realloc() function tries to change the size of the allocation pointed
to by ptr to size, and returns ptr. If there is not enough room to
enlarge the memory allocation pointed to by ptr, realloc() creates a new
allocation, copies as much of the old data pointed to by ptr as will fit
to the new allocation, frees the old allocation, and returns a pointer to
the allocated memory. If ptr is NULL, realloc() is identical to a call
to malloc() for size bytes. If size is zero and ptr is not NULL, a new,
minimum sized object is allocated and the original object is freed. When
extending a region allocated with calloc(3), realloc(3) does not guaran-
tee that the additional memory is also zero-filled.
#include <stdio.h> #include <stdlib.h> typedef char *sds; int main() { printf("Hello, World!\n"); char t[] = {'a','b','c','d'}; sds s = t+1; char bb = s[0]; char cc = s[1]; char dd = s[2]; char flag = *(s - 1); printf("%c %c %c %c", flag, bb, cc ,dd); int * p=NULL; p=(int *)malloc(sizeof(int)); *p=3; printf("\np=%p\n",p); printf("*p=%d\n",*p); // 空间不变 p=(int *)realloc(p,sizeof(int)); printf("p=%p\n",p); printf("*p=%d\n",*p); // 空间扩大三倍,同时内容会被复制(内存足够的情况下,起始地址不变) p=(int *)realloc(p,3*sizeof(int)); printf("p=%p\n",p); printf("*p=%d",*p); //释放p指向的空间 realloc(p,0); p=NULL; return 0; }
2 结果:
Hello, World!
a b c d
p=0x7fa656405b50
*p=3
p=0x7fa656405b50
*p=3
p=0x7fa656405b50 // 扩容后起始地址没有变化(内存足够)
*p=3
Process finished with exit code 0
3 小结
函数:void * realloc(void * p,int n); // 指针p必须为指向堆内存空间的指针,即由malloc函数、calloc函数或realloc函数分配空间的指针。 // realloc函数将指针p指向的内存块的大小改变为n字节。如果n小于或等于p之前指向的空间大小, // 那么。保持原有状态不变。如果n大于原来p之前指向的空间大小,那么,系统将重新为p从堆上 // 分配一块大小为n的内存空间,同时,将原来指向空间的内容依次复制到新的内存空间上, // p之前指向的空间被释放。relloc函数分配的空间也是未初始化的。
这篇关于redis sds 数据结构如何使用 C realloc函数来动态扩容的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-07Redis高并发入门详解
- 2024-12-07Redis缓存入门:新手必读指南
- 2024-12-07Redis缓存入门:新手必读教程
- 2024-12-07Redis入门:新手必备的简单教程
- 2024-12-07Redis入门:新手必读的简单教程
- 2024-12-06Redis入门教程:从安装到基本操作
- 2024-12-06Redis缓存入门教程:轻松掌握缓存技巧
- 2024-12-04Redis入门:简单教程详解
- 2024-11-29Redis开发入门教程:从零开始学习Redis
- 2024-11-27Redis入门指南:快速掌握Redis基础操作