11得票2回答
NUMA感知缓存对齐的内存分配

在Linux系统中,pthread库提供了一个函数(posix_memalign)用于缓存对齐以防止虚假共享。为了选择特定的NUMA节点,我们可以使用libnuma库。我想要的是需要同时使用这两个库。我想将某些线程绑定到特定的处理器,并希望为每个线程从相应的NUMA节点分配本地数据结构,以便减...

8得票3回答
realloc但只有前几个字节有意义

假设我已经使用ptr = malloc(old_size);来分配一个有old_size字节的内存块。只有前header_size字节是有意义的。现在我将增加尺寸到new_size。 new_size大于old_size,而old_size大于header_size。 之前: /- - ...

8得票3回答
malloc/calloc返回的内存地址是否来自虚拟地址空间?

char *ptr = (char*) malloc(40); printf("%u",ptr); 56737856 (some output) 现在,如果我没有理解错误的话,我们在上面看到的输出不是物理地址,而是虚拟地址。我理解正确吗? 有没有办法看到实际的物理地址?或者反过来(如果...

86得票12回答
8得票7回答
不使用malloc,能否返回指向结构体的指针?

我是一名使用GBDK编写Gameboy ROM的开发者。GBDK自带一个不稳定版本的malloc函数,我无法使其正常工作。同时,我也无法在结构体中嵌套另一个结构体。这使我只能尝试返回一个指针,因此我想知道是否有一种方法可以避免在返回结构体指针时使用malloc函数? 基本上,我的目标是要能够...

7得票5回答
malloc分配的对象的动态类型是什么?

C++标准中提到了“动态类型”这个术语(C标准在类似的上下文中提到了“有效类型”),例如: 如果程序尝试通过除以下类型之一的glvalue访问对象的存储值,则行为未定义: - 对象的动态类型, 但是,使用malloc分配对象的动态类型如何确定呢? 例如: void *p = mallo...

18得票3回答
为什么malloc(0)的返回值是实现定义的?

ISO/IEC 9899:TC2(即C99标准)第7.20.3节规定: 如果请求空间的大小为零,则行为是实现定义的:要么返回空指针,要么行为就像大小为非零值一样,除了不能使用返回的指针来访问对象。 换句话说,malloc(0)可能会返回NULL,也可能会返回一个有效的指针,但不能对...

10得票4回答
glibc malloc如何比较来自不同“对象”的指针?

使用关系运算符(例如<、<=、>=或>)比较指针仅在指针都指向同一聚合对象(结构体、数组或联合体)内时,才由C标准定义。这实际上意味着,以下形式的比较if (start_object <= my_pointer && my_pointer <...

15得票12回答
在C语言中处理内存分配的最佳方法是什么?

如何在C语言中处理内存是最佳实践? 没有类可以为我处理构造函数/析构函数。 在函数开头分配内存还是使用一个为我创建它的函数好?如何释放它们? 这些是广泛的问题,不同情况下可能有所不同,但您如何处理它们? 您能给出什么提示和经验教训吗? 我认为我掌握了如何在C++中处理内存,但在C...

21得票7回答
频繁调用malloc()和free()函数有多糟糕?

我正在发送一个文本文件 - 客户端和服务器将文本分成每个512字节的数据包,但有些数据包包含的文本大小不到最大值。在服务器端接收每个数据包时,我会调用malloc()重新构建一个字符串。这是一种糟糕的做法吗?是否更好保持一个可容纳最大长度的工作缓冲区并继续迭代,复制和覆盖其值? 好的@n.m...