今天我们继续redis源码test测试包下的其他文件,今天看完的是memtest文件,翻译器起来,就是memory test 内存检测的意思,这个文件虽然说代码量不是很多,但是里面的提及了很多东西,也给我涨了很多见识,网上关于memtest这种类似的redis内部边缘的文件解析基本没有,所以自己从头开始学习。机器的内存检测会和机器的CPU位数有关,32位或64位会影响后面的一些宏定义参数。首先亮出memtest中的API:
/* 内存检测API */
void memtest_progress_start(char *title, int pass) /* 内存检测加载开始,输出开始的一些图线显示 */
void memtest_progress_end(void) /* progress bar加载完再次清屏操作 */
void memtest_progress_step(size_t curr, size_t size, char c) /* progress填充自己设置的字符串 */
void memtest_addressing(unsigned long *l, size_t bytes) /* 地址检测方法 */
void memtest_fill_random(unsigned long *l, size_t bytes) /* 随机填充内存 */
void memtest_fill_value(unsigned long *l, size_t bytes, unsigned long v1, unsigned long v2, char sym) /* 像上面的方法,只不过这是特定2种值的填充v1,v2 */
void memtest_compare(unsigned long *l, size_t bytes) /* 内存比较方法 */
void memtest_compare_times(unsigned long *m, size_t bytes, int pass, int times) /* 进行多次内存compare比较操作 */
void memtest_test(size_t megabytes, int passes) /* 整个内存检测类操作的测试方法,passes为目标的循环数 */
void memtest_non_destructive_invert(void *addr, size_t size) /* 将内存地址,进行了按位取反操作,不具有对数据的破坏性 */
void memtest_non_destructive_swap(void *addr, size_t size) /* 将内存地址,2个,2个内部之间做交换,同样不对数据具有破坏性 */
void memtest(size_t megabytes, int passes) /* 开发给整个系统使用的内存检测方法 */
里面主要的方法就几个,每当一个内存检测的开始,都会出现progress bar的图线输出:
/* 内存检测加载开始,输出开始的一些图线显示 */
void memtest_progress_start(char *title, int pass) {
int j;
/*这里其实包含2个命令,"\xlb[H","xlb[2j",后面的命令是主要的操作
*"\x1b" 是ESC的1