malloc使用4个字节作为char



我正在编写一段代码来检查如何在堆栈和堆之间管理内存。课程作业。

#include<stdio.h>
#include<stdlib.h>
#define NUM_OF_CHARS 100

// function prototype
void f(void);

int main()
{
    f();
    return 0;
}
void f(void)
{
    char *ptr1;
    ptr1 = (char *) malloc(NUM_OF_CHARS * sizeof(int));
    printf("Address array 1: %016lxn", (long)ptr1);

    char *ptr2;
    ptr2 = (char *) malloc(NUM_OF_CHARS * sizeof(int));
    printf("Address array 2: %016lxn", (long)ptr2);
}

当我运行此代码时,我得到以下内容:

Address array 1: 000000000209e010
Address array 2: 000000000209e1b0

我的期望是看到100个字节的地址有差异,但差异是416个字节,当我将NUM_of_CHARS更改为任何其他值(200300,…)时,结果总是(NUM_of_HARS*4+16),所以它就像malloc为每个字符分配4个字节,而不是一个字节加上16个字节的一些开销。

有人能解释一下这里发生了什么吗?

内存分配取决于平台/编译器。malloc唯一能确保的是它为您的请求分配足够的内存,仅此而已。

由于内存对齐,无法保证您的地址是连续的

此外,您在代码中是按ints而不是char的大小进行分配的。这很可能是您看到NUM_OF_CHARS*4差异的原因,而其余差异可归因于填充。

相关内容

  • 没有找到相关文章

最新更新