如何计算指针指向内存的大小?
在我写的一个函数中:
char *ab; ab=malloc(10);
然后在另一个函数中我想知道ab
指针指向的内存大小。 有什么方法我可以知道ab
指向10个内存字符?
这是一个秘密,只有free()才知道。 它可能在您的系统中,但以完全依赖于实现的方式。
有点尴尬,但如果你想把所有东西放在一起:
typedef结构 {//数据大小后跟数据(C只是技巧!不适用于C ++) int维; //数据元素的数量 int data [1]; //可变数量的数据元素 malloc_int_t; malloc_int_t * ab; int dimension = 10; ab = malloc(sizeof(* ab)+(dimension-1)* sizeof(int)); ab-> dimension = dimension; ab-> data [n] //数据访问
我已将数据类型更改为int,以使代码成为更通用的模板。
不,你没有标准的方法来做到这一点。 你必须将指向内存的大小和指针一起传递,这是一个常见的解决方案。
也就是说
void f(char* x) { //... }
使用
void f(char *x, size_t length) { //.... }
并在您的代码中
char *ab = malloc( 10 ); f( ab, 10 );
你不能(无论如何)。 你必须自己跟踪大小。
malloc
某些实现可以为您提供访问该信息的API,但标准中没有相关规定。
没有办法,你必须将分配的内存大小存储在另一个变量中。
不,不幸的是。
您需要将块的大小与指针一起传递。
没有。
现在,正如所说,有非便携式黑客可以做到这一点,但依靠它们是不安全的。
如果你100%确定知道内存是通过malloc()分配的,你可以将指针倒回几个字节并检查’malloc节点’,用于跟踪已经分配了哪些内存部分,哪些部分有不。 但是,我不能强调这一点 – 不要依赖于此。
大小是您传递给malloc
的大小,您可以使用全局变量或宏来记住它。
无法从指针本身推断出已分配内存的大小。 由于ab
是char *
, sizeof(ab)
与sizeof(char *)
,这显然与分配的内存块的大小不同。
由于您使用所需大小调用malloc
,因此您知道大小是多少。 将此数字与指向需要知道大小的函数的指针一起传递。
我有一个结构和一个指向其内存地址的字符指针。 所以将它与你的问题联系起来,我想找到它所指向的内存位置的大小,即结构的大小。 所以你在逻辑上做的是找到指针创建的对象的大小。 这对我有用:
unsigned char * buffer= Library1Structure; int x=sizeof(Library1Structure);
所以x的值告诉我指针缓冲区指向的内存位置的大小。