实现个 Concurrent Trie
使用了 move 后,不能再对 new_node 任何操作了,未知的。
$ make format
$ make check-lint
$ make check-clang-tidy-p0
valgrind \
--error-exitcode=1 \
--leak-check=full \
./test/starter_trie_test
-DCMAKE_BUILD_TYPE=Debug
#include "common/logger.h"
LOG_INFO("# Pages: %d", num_pages);
LOG_DEBUG("Fetching page %d", page_id);
小问题,就是多次运行时出现了 AddressSanitizer:DEADLYSIGNAL
GPT 回答
当程序在执行两三次后出现"AddressSanitizer:DEADLYSIGNAL"错误时,这可能是由于程序中存在一些难以察觉的内存访问问题,可能是由于随机性导致的。这种问题可能会在某些情况下触发,但在其他情况下却不会。这种不稳定性可能与内存布局的随机性有关,即地址空间布局随机化(ASLR)。
ASLR是一种安全功能,用于随机化程序的内存布局,以增加系统的安全性。然而,有时候ASLR可能会导致一些问题,特别是在使用内存检查工具(如AddressSanitizer)时。禁用ASLR可能会暂时解决这个问题,但不建议在生产环境中这样做,因为ASLR是一项重要的安全功能。
另一种解决方法是直接调用可执行文件的运行时链接器,而不是让内核在程序启动时加载链接器。这种方法可以绕过内核加载程序时的ASLR,从而减少出现"AddressSanitizer:DEADLYSIGNAL"错误的可能性。这种做法可能会提供更稳定的执行环境,尤其是在涉及ASLR的情况下。
通过以上方法,你可以尝试解决程序在执行两三次后出现"AddressSanitizer:DEADLYSIGNAL"错误的问题,提高程序的稳定性和可靠性。