Sizeof(uint8_t*) is always 4?
(Sizeof(uint8_t*) is always 4?)这个问题的出现的原因是因为sizeof(uint8_t*)
返回的是指针的大小,对于32位架构来说通常是4字节,对于64位架构来说通常是8字节。这个大小通常不取决于底层的结构(对于uint8_t*、std::string*、long*等来说应该是相同的),尽管这并不是绝对的。
解决这个问题的方法是使用sizeof(uint8_t)
来获取uint8_t
的大小,因为uint8_t
是一个字节大小的数据类型。
然而,如果你想知道uint8_t*
指向的内存的大小,是没有办法仅通过指针来实现的。你需要手动跟踪内存的大小。通常可以通过使用std::vector<uint8_t>来代替原始指针来实现。这样你就可以通过vector.size()
来获取内存的大小。
如果你需要将分配的大小传递给函数的输出指针,通常是没有办法实现的。除非这个函数有特殊的处理,比如保证大小始终相同,或者保证数组的最后一个元素为0。否则,这个函数的编写方式是非常糟糕的,你注定会失败。