为什么 valgrind "valid value" 需要 8 位?
Why valgrind "valid value" need 8 bits?
访问http://valgrind.org/docs/manual/mc-manual.html#mc-manual.machine
valgrind 使用V 位来验证数据的有效性。在我看来,只有1位可以验证有效性,但为什么valgrind需要8位?
这里好像有解释:
It is simplest to think of Memcheck implementing a synthetic CPU which is identical to a real CPU, except for one crucial detail. Every bit (literally) of data processed, stored and handled by the real CPU has, in the synthetic CPU, an associated "valid-value" bit, which says whether or not the accompanying bit has a legitimate value. In the discussions which follow, this bit is referred to as the V (valid-value) bit.
因此,Valgrind 测试环境中的每一位都有对应的有效-无效位来跟踪其有效性。这对于位字段尤其重要,其中一位可以表示类似布尔值的东西,仅由一位表示。
在这个级别上,Valgrind 正在将内存分辨率的绝对精度降低到二进制级别,似乎是为了提供一个可以观察和执行分析的良好数据景观。
分配以字节为单位。也就是说,您传递给 malloc
的整数是您要分配的字节数。所以memcheck每字节只需要一位来跟踪内存地址是否已经分配。
但是初始化可以作用于单个位,而不仅仅是整个字节。如果字节 X 的所有位都未初始化,然后我执行 X = X | (1 << 3)
,那么现在只有 X 的一位被初始化。因此 memcheck 跟踪每个单独的位是否已被初始化。由于一个字节有 8 位(在 memcheck 支持的所有 CPU 上),这意味着 memcheck 每个字节需要另外 8 位来跟踪哪些位已被初始化。
访问http://valgrind.org/docs/manual/mc-manual.html#mc-manual.machine
valgrind 使用V 位来验证数据的有效性。在我看来,只有1位可以验证有效性,但为什么valgrind需要8位?
这里好像有解释:
It is simplest to think of Memcheck implementing a synthetic CPU which is identical to a real CPU, except for one crucial detail. Every bit (literally) of data processed, stored and handled by the real CPU has, in the synthetic CPU, an associated "valid-value" bit, which says whether or not the accompanying bit has a legitimate value. In the discussions which follow, this bit is referred to as the V (valid-value) bit.
因此,Valgrind 测试环境中的每一位都有对应的有效-无效位来跟踪其有效性。这对于位字段尤其重要,其中一位可以表示类似布尔值的东西,仅由一位表示。
在这个级别上,Valgrind 正在将内存分辨率的绝对精度降低到二进制级别,似乎是为了提供一个可以观察和执行分析的良好数据景观。
分配以字节为单位。也就是说,您传递给 malloc
的整数是您要分配的字节数。所以memcheck每字节只需要一位来跟踪内存地址是否已经分配。
但是初始化可以作用于单个位,而不仅仅是整个字节。如果字节 X 的所有位都未初始化,然后我执行 X = X | (1 << 3)
,那么现在只有 X 的一位被初始化。因此 memcheck 跟踪每个单独的位是否已被初始化。由于一个字节有 8 位(在 memcheck 支持的所有 CPU 上),这意味着 memcheck 每个字节需要另外 8 位来跟踪哪些位已被初始化。