首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找到malloc分配的两个内存地址之间的区别?

如何找到malloc分配的两个内存地址之间的区别?
EN

Stack Overflow用户
提问于 2022-02-15 20:01:03
回答 1查看 104关注 0票数 0

第一件事,这是为一个大学班级。问题是运行malloc 1001次,大小为4,将每个返回的指针存储为char *,然后得到第一个指针和最后一个指针之间的差异,以计算所使用的总内存。指令还指出,这个数字将远远高于人们的预期。

到目前为止,这就是我所拥有的,但我不认为它能正常工作(即使是这样,如果有人能告诉我如何更有效地做到这一点,我也会很感激):

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main()
{
  // Init variables
  int size = 4;
  char *ptrs[1001];

  // Allocate memory
  for (int i = 0; i <= 1001; i++)
  {
    ptrs[i] = malloc(size);
  }

  // Get first and last address
  int *first_ptr = (int*)&ptrs[0];
  int *last_ptr = (int*)&ptrs[sizeof(ptrs) / sizeof(*ptrs) - 1];
  int diff = (int)last_ptr - (int)first_ptr;

  // Print first and last address
  printf("First pointer's address: %d\n", first_ptr);
  printf("Last pointer's address: %d\n", last_ptr);
  printf("Memory used: %d\n", diff);

  free(*ptrs);

  return 0;
}

到目前为止,第一个和最后一个地址总是很大的负值(这可能很好,我不确定),而且差别总是4000,即使我将大小更改为16或32。

任何帮助都将不胜感激。

EN

Stack Overflow用户

发布于 2022-02-15 20:14:42

您的代码有错误:

下面的循环应该具有此条件:i< 1001而不是i <= 1001作为char *ptrs1001有1001元素(索引格式为0到1000),而不是1002。

代码语言:javascript
复制
  // Allocate memory
  for (int i = 0; i <= 1001; i++)
  {
    ptrs[i] = malloc(size);
  }

如果您想知道分配内存的地址与数组元素的地址之间的差异,那么只需使用数组的值:

代码语言:javascript
复制
int difference = (int)(ptrs[1000] - ptrs[0])

在您的例子中,您正在计算数组中的地址之间的差异,它取决于数组元素的大小(指针的大小),而不是它的元素的内容。

代码语言:javascript
复制
  // Get first and last address
  int *first_ptr = (int*)&ptrs[0];
  int *last_ptr = (int*)&ptrs[sizeof(ptrs) / sizeof(*ptrs) - 1];

第一个和最后一个元素之间的差异并不保证是实际使用的内存大小。这取决于内存分配的工作方式。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71132660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档