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 long
或 int64_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 字节。
在我的 OS long long int 中是:8 个字节。 int 是 4 个字节 .
int *p = malloc(4);
此代码为堆上的整数类型变量分配 4 个字节。
int *p = malloc(8);
这会分配一个像 'one variable' 这样的长整数还是数组中的两个项目。
如何分配一个 8 字节长的整数? 我如何分配包含 2 个项目的数组?
如果你想要一个 8 字节的整数,它被称为 long long
或 int64_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 xint
, or it may not, that depends on whatsizeof(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 字节。