C 为64个8字节块分配内存

C 为64个8字节块分配内存,c,memory,C,Memory,如何为64个8字节块分配内存? 我试过在uint64上阅读,但我不确定从哪里开始。这应该很简单。要么运行: void *foo = malloc(64 * 8); 或者,如果需要类型安全性: #if (CHAR_BIT != 8) #error Weird broken system, give up... #endif uint64_t *foo = malloc(sizeof(uint64_t[64])); 在c中,malloc分配指定的字节数,因此如果要分配64个8字节块,则必须分配m

如何为64个8字节块分配内存?
我试过在uint64上阅读,但我不确定从哪里开始。

这应该很简单。要么运行:

void *foo = malloc(64 * 8);
或者,如果需要类型安全性:

#if (CHAR_BIT != 8) #error Weird broken system, give up... #endif
uint64_t *foo = malloc(sizeof(uint64_t[64]));

在c中,
malloc
分配指定的字节数,因此如果要分配64个8字节块,则必须分配
malloc(64*8)
。别忘了
释放它们

如果您不打算以友好方式分配它们,您可以声明一个数组。在c语言中,有一种类型有64位(8字节),名为
uint64\u t
,因此您可以用这种方式声明一个由64个元素组成的8字节数组:
uint64\u t块[64]

作为对评论中问题的回答,声明变量将使其在其范围内有效。因此,如果全局声明数组,它将一直有效,直到程序关闭。如果在
if
条件中声明它(例如),它将仅在条件中有效。阅读以下内容以更好地了解其工作原理:

如果分配一块内存将
malloc
,那么它的方向必须保存在一个变量中,以便您以后可以访问它,这里应用相同的范围规则,但不要忘记在丢失方向指针之前释放内存,否则会发生内存泄漏


如果您没有太多经验,我不建议您使用
malloc

您可以使用
malloc
来实现这一点:

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main()
{
    void* ptr = malloc(sizeof(uint64_t) * 64);
    printf("Allocated memory begins at %p", ptr);
}
#包括
#包括
#包括
int main()
{
void*ptr=malloc(sizeof(uint64_t)*64);
printf(“分配的内存从%p开始”,ptr);
}

动态内存?通常不由您决定块大小,但64*8=512,所以只要
malloc(512)
malloc(64*8)
在C或
uint64\u t数组[64]的静态数组中也能正常工作。
?再说一遍,
你试过什么?
?在64*8=320的另一个宇宙中,这很好。malloc(64*8)可以正常工作。
unsigned char(*blocks)[8]=malloc(64*sizeof(char[8])
@gnasher729 Lol,我累了,把我的计算器放在
十六进制
,修好了。这里不喜欢
calloc()
?在我看来,后者一点也不“漂亮”。@Jite它增加了类型安全性否?这应该是一个很大的优势?然而,它更具体的类型安全?它是64位整数类型,与8一样硬编码。。8.当然,如果你觉得可能打错了,希望你不要滑倒并写下uint32。如果它是一个变量,我会同意。但是,嘿,当然,有些模糊的系统实际上是64位的!=8字节。@Jite-True,不可否认,我假设在这方面符合POSIX,因为系统将像字节是八位字节一样工作。我将添加一个对此效果的修改。对于
printf
指针,您应该执行
printf(“%p”,ptr)
,同时确保
ptr
是无效指针。@BillLynch,感谢您提供的信息。忘记了这个规格。