malloc 对 char 使用 4 个字节
malloc using 4 bytes for 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: %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 个字节的一些开销。
谁能解释一下这里发生了什么?
内存分配 platform/compiler 依赖。 malloc
唯一确保的是它 为您所要求的 分配足够的内存,仅此而已。
,无法保证您的地址是连续的
此外,您在代码中按 ints
的大小而不是 char
进行分配。这很可能是您看到 NUM_OF_CHARS*4
差异的原因,而其余差异可归因于填充。
我正在编写代码来检查如何在堆栈和堆之间管理内存。对于课程作业。
#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 个字节的一些开销。
谁能解释一下这里发生了什么?
内存分配 platform/compiler 依赖。 malloc
唯一确保的是它 为您所要求的 分配足够的内存,仅此而已。
此外,您在代码中按 ints
的大小而不是 char
进行分配。这很可能是您看到 NUM_OF_CHARS*4
差异的原因,而其余差异可归因于填充。