《c 和 指针》 中提到
动态分配内存时,malloc实际分配的内存有可能比你请求的要多一些
那么,怎么确定实际分配内存的大小?
操作系统是需要知道每个指针分配了多少内存的,我们在调用delete的时候也没有告诉操作系统这个指针只想的区域占用了多少内存,所以肯定有一个地方保存着这个值,而这个值在不同的操作系统有不同的实现,比如最简单的一种实现就是在每个指针前面一个字节用来保存内存分配的长度,一般操作系统都会提供一个函数来获取这个实际内存的大小,比如malloc_size之类的函数。
如果你有兴趣可以看看redis源码,zmalloc.h和zmalloc.c
https://github.com/antirez/re...
#if defined(USE_TCMALLOC)
#define ZMALLOC_LIB ("tcmalloc-" __xstr(TC_VERSION_MAJOR) "." __xstr(TC_VERSION_MINOR))
#include <google/tcmalloc.h>
#if (TC_VERSION_MAJOR == 1 && TC_VERSION_MINOR >= 6) || (TC_VERSION_MAJOR > 1)
#define HAVE_MALLOC_SIZE 1
#define zmalloc_size(p) tc_malloc_size(p)
#else
#error "Newer version of tcmalloc required"
#endif
#elif defined(USE_JEMALLOC)
#define ZMALLOC_LIB ("jemalloc-" __xstr(JEMALLOC_VERSION_MAJOR) "." __xstr(JEMALLOC_VERSION_MINOR) "." __xstr(JEMALLOC_VERSION_BUGFIX))
#include <jemalloc/jemalloc.h>
#if (JEMALLOC_VERSION_MAJOR == 2 && JEMALLOC_VERSION_MINOR >= 1) || (JEMALLOC_VERSION_MAJOR > 2)
#define HAVE_MALLOC_SIZE 1
#define zmalloc_size(p) je_malloc_usable_size(p)
#else
#error "Newer version of jemalloc required"
#endif
#elif defined(__APPLE__)
#include <malloc/malloc.h>
#define HAVE_MALLOC_SIZE 1
#define zmalloc_size(p) malloc_size(p)
#endif
还可以了解一下 tcmalloc 和 jemalloc 的实现
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
知乎上我有看过:
见:https://www.zhihu.com/questio...