malloc 如何区分我分配一个 long long 整数和两个整数的数组?

How does malloc distinguish between me allocating a long long integer and an array of two integers?

在我的 OS long long int 中是:8 个字节。 int 是 4 个字节 .

int *p = malloc(4);

此代码为堆上的整数类型变量分配 4 个字节。

int *p = malloc(8);

这会分配一个像 'one variable' 这样的长整数还是数组中的两个项目。

如何分配一个 8 字节长的整数? 我如何分配包含 2 个项目的数组?

如果你想要一个 8 字节的整数,它被称为 long longint64_t/int64_t:

如果这是关于 C 的,那么你使用 malloc:

int64_t* p = malloc(sizeof(int64_t));

如果这是关于 C++ 的,那么你使用 new:

int64_t* p = new int64_t;

使用您的原始代码,您将获得 任意大小 的分配映射到 固定大小类型 的指针,其中 int 通常是 4 个字节,换句话说,您有 int[2].

的空间

Note: For portability reasons it's always best to express your allocations in terms of base types, not just abstract numbers. malloc(8) may allocate memory for 2 x int, or it may not, that depends on what sizeof(int) is. malloc(sizeof(int) * 2) always works correctly.

malloc()只是分配原始内存,是否将其视为数组或单个变量取决于调用者如何使用内存。

int *p = malloc(2 * sizeof(int));

将内存视为 2 int 的数组。然后你可以这样做:

p[0] = 1;
p[1] = 2;

然后它会写入两个int到内存中。

long int *p = malloc(sizeof(long int));

将内存视为单个 long int(或者等效地,一个包含 1 个 long int 的数组)。然后你可以这样做:

*p = 12345678;

然后它将那个长整数写入内存。

它们都将在系统上分配 8 字节的内存,其中 int 是 4 字节,long int 是 8 字节。