malloc使用4个字节的char

时间:2015-02-26 03:59:54

标签: memory alignment malloc

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

#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: %016lx\n", (long)ptr1);


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

}

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

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

我的期望是看到100字节地址的差异,但差异是416字节,当我将NUM_OF_CHARS更改为任何其他值(200,300,...)时,结果总是(NUM_OF_CHARS * 4 + 16 ),所以像malloc这样的接缝为每个字符分配4个字节而不是一个字节加上一些开销的16个字节。

任何人都可以解释这里发生的事情吗?

1 个答案:

答案 0 :(得分:0)

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

由于memory alignment

,无法保证您的地址是连续的

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