有什么方法可以找到动态内存的大小,比如sizeof facelity?

问题描述 投票:0回答:1

我在找一个东西,它能给我str字符指针所占的大小,我想证明给我的内存是100字节,有谁知道这个方法吗?

int main()
{
    char * str = (char *) malloc(sizeof(char) * 100);
    int size = 0;
    size  = /* library function or anything use to find size */
    printf("Total size of str array - %d\n", size);
}

我想证明给我的内存是100字节,有人知道吗?

c++ c malloc heap heap-memory
1个回答
2
投票

一个原始指针只知道它指向它的类型中的一个元素。如果它指向的那个东西恰好是一个数组的一部分,指针就不知道,也没有办法从它那里得到这些信息。

你想使用的类型是 知道他们的大小,比如说。std::string, std::arraystd::vector.


1
投票
  1. C和C++标准并没有提供一种方法来从一个地址中获取在调用到 malloc 返回该地址。

  2. 一些C或C++的实现提供了一种方法来获取在给定地址处提供的内存量,如 malloc_size. 提供的数量可能会大于请求的数量。

  3. 如果内存中包含一个字符串,这是一个以空字符结束的字符数组,那么你可以通过计算直到空字符的字符来确定字符串的长度。这个函数是由标准的 strlen 函数。这个长度与分配的空间是不同的,除非,字符串恰好填满了这个空间。


0
投票

没有(好的、标准的、可移植的)方法可以单单从一个指针值来判断它是否是数组的第一个元素,也没有办法判断它后面有多少元素。 这些信息必须单独跟踪。

如果你是用C++写的,如果可以的话,不要自己做内存管理。使用一个标准的容器类型,比如 std::vectorstd::map (或 std::string 为文本)。) 如果你 必须 做自己的内存管理,使用 newdelete 运算符而不是 *allocfree 库函数,并围绕这些操作封装一个类,该类还跟踪有多少元素被分配(这一点,就像 std::vectorstd::map,是通过一个只读的 size() 方法)。)

© www.soinside.com 2019 - 2024. All rights reserved.