访问http://valgrind.org/docs/manual/mc-manual.html#mc-manual.machine
使用V位验证数据的有效性。在我看来,只有1位可以验证其有效性,但为什么法研需要8位?
发布于 2016-03-07 18:23:40
分配是以字节为单位的。也就是说,传递给malloc
的整数是要分配的字节数。因此,memcheck每字节只需要一位就可以跟踪是否分配了内存地址。
但是初始化可以在单个位上工作,而不仅仅是在整个字节上。如果字节X的所有位都未初始化,然后执行X = X | (1 << 3)
,那么现在只初始化一位X。因此,memcheck跟踪每个单独的位是否已经初始化。由于一个字节中有8位(在memcheck支持的所有CPU上),这意味着memcheck每个字节还需要8位来跟踪哪些位已经初始化。
发布于 2016-03-07 17:57:54
就像在这里解释的那样:
最简单的想法是,Memcheck实现了一个与实际CPU相同的合成CPU,除了一个关键的细节。在合成CPU中,由实际CPU处理、存储和处理的每一位(字面上的)数据都有一个相关的“有效值”位,该位表示伴随的位是否具有合法值。在接下来的讨论中,这个位被称为V(有效值)位.
因此,每一位在瓦莱尔测试环境中都有一个对应的有效位-非有效位来跟踪其有效性。这对于位字段来说尤为重要,其中一个位可以表示类似布尔值的东西,只能用一个位表示。
在这一级别上,瓦兰将获得内存分辨率的绝对精度,似乎是为了提供一个良好的数据披肩,以便它能够观察和执行分析。
https://stackoverflow.com/questions/35857524
复制相似问题