标签: malloc

什么是嵌入式系统的优秀C内存分配器?

我有一个单线程的嵌入式应用程序,可以分配和释放大量的小块(32-64b).基于缓存的分配器的完美方案.虽然我可以尝试写一个,但这可能是浪费时间,而不是像一些已经在前线的解决方案那样经过测试和调整.

那么我可以用于这种情况的最佳分配器是什么?

注意:我在系统中使用Lua虚拟机(这是80%以上的分配的罪魁祸首),所以我不能轻易地重构我的代码以使用堆栈分配来提高分配性能.

c embedded malloc lua allocation

21
推荐指数
5
解决办法
6110
查看次数

为什么在C中使用malloc时指定大小?

请使用以下代码:

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

p[0] = 10;  //Using the two spaces I
p[1] = 20;  //allocated with malloc before.

p[2] = 30;  //Using another space that I didn't allocate for. 

printf("%d", *(p+1)); //Correctly prints 20
printf("%d", *(p+2)); //Also, correctly prints 30
                      //although I didn't allocate space for it
Run Code Online (Sandbox Code Playgroud)

malloc(2 * sizeof *p)我用这条线为两个整数分配空间,对吧?但是如果我添加int到第三个位置,我仍然可以正确分配并可检索.

所以我的问题是,为什么在使用时指定尺寸malloc

c malloc memory-management

21
推荐指数
4
解决办法
3256
查看次数

对齐内存管理?

关于管理对齐的内存块,我有一些相关的问题.跨平台的答案是理想的.但是,由于我非常确定不存在跨平台解决方案,因此我主要对Windows和Linux以及(在很大程度上)Mac OS和FreeBSD感兴趣.

  1. 在16字节边界上对齐大块内存的最佳方法是什么?(我知道使用琐碎的方法malloc(),分配一些额外的空间,然后将指针碰到一个正确对齐的值.虽然我希望能找到更少的东西.另外,请参阅下面的其他内容的问题.)

  2. 如果我使用普通旧的malloc(),分配额外的空间,然后将指针移动到正确对齐的位置,是否有必要将指针保持在块的开头以便释放?(调用free()指向块中间的指针似乎在Windows上实际运行,但我想知道标准是什么,即使标准说你不能,它是否在所有主要操作系统的实践中都有效.我不关心模糊的DS9K操作系统.)

  3. 这是一个艰难/有趣的部分.在保持对齐的同时重新分配内存块的最佳方法是什么?理想情况下,这将比调用malloc(),复制,然后调用free()旧块更智能.我想尽可能在​​适当的地方做.

c malloc memory-management alignment realloc

21
推荐指数
1
解决办法
2万
查看次数

Malloc错误"无法分配区域"失败,错误代码为12.任何想法如何解决?

我收到此错误,不知道该怎么办:

AppName(3786,0xa0810540) malloc: *** mmap(size=16777216) failed (error code=12)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Run Code Online (Sandbox Code Playgroud)

如果我设置断点到发生错误的那一行,我不知道我要专门搜索什么.在仪器中,我检查了分配,并且值增加到所有分配的14,5 GB.

有人可以帮我吗?
brush51

编辑1:
更多信息:
- 我在模拟器中尝试这个,而不是在iOS设备上.
- 这就是所有的输出(我得到这个错误的次数更多). - 此行发生错误:

NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *fetchREntitySetsCards = [[[NSFetchRequest alloc] init] autorelease];
//NSFetchRequest *fetchREntityRelCardsAnswersNotes = [[[NSFetchRequest alloc] init] autorelease];

NSEntityDescription *entitySetsCards = [NSEntityDescription entityForName:@"EntitySetsCards" inManagedObjectContext:context];
//NSEntityDescription *entityRelCardsAnswersNotes = [NSEntityDescription entityForName:@"EntityRelCardsAnswersNotes" inManagedObjectContext:context];
setEntity:entityCard];
[fetchREntitySetsCards setEntity:entitySetsCards];
//[fetchREntityRelCardsAnswersNotes setEntity:entityRelCardsAnswersNotes];

NSArray *fetchedObjSetsCards    = [context executeFetchRequest:fetchREntitySetsCards error:&error];
//The error is here--->
//NSArray …
Run Code Online (Sandbox Code Playgroud)

malloc memory-management allocation ios

21
推荐指数
2
解决办法
6万
查看次数

如果我使用mmap而不是malloc分配内存怎么办?

使用mmap(使用MAP_PRIVATE和MAP_ANONYMOUS)比使用分配内存有什么缺点malloc?对于函数范围内的数据,我会使用堆栈内存,因此不会malloc.

想到的一个缺点是动态数据结构,例如树和链表,您经常需要分配和释放小块数据.使用mmap它会有两个原因,一个用于分配4096字节的粒度,另一个用于要求进行系统调用.

但在其他情况下,你认为哪个malloc更好mmap?其次,我是否过高估计mmap动态数据结构的缺点?

的一个优点mmap超过malloc我能想到的是,内存被立即返回到操作系统,当你这样做munmap,而用malloc/free的,我猜内存uptil数据段断点再也没有回来,但存放回用.

c linux malloc memory-management mmap

21
推荐指数
3
解决办法
1万
查看次数

如何在C中初始化const中的const(使用malloc)

我试过了;

void *malloc(unsigned int);
struct deneme {
    const int a = 15;
    const int b = 16;
};

int main(int argc, const char *argv[])
{
    struct deneme *mydeneme = malloc(sizeof(struct deneme));
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是编译器的错误:

gereksiz.c:3:17: error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
Run Code Online (Sandbox Code Playgroud)

而且,这也是;

void *malloc(unsigned int);
struct deneme {
    const int a;
    const int b;
};

int main(int argc, const char *argv[])
{
    struct deneme *mydeneme = malloc(sizeof(struct deneme));
    mydeneme->a = 15;
    mydeneme->b = 20; …
Run Code Online (Sandbox Code Playgroud)

c malloc struct initialization constants

21
推荐指数
2
解决办法
3万
查看次数

malloc(sizeof(int))vs malloc(sizeof(int*))vs(int*)malloc(sizeof(int))

我承认所有这三个都有不同的含义.但是,我不明白每种情况适用于哪些特定情况.任何人都可以分享这些例子吗?谢谢.

       malloc(sizeof(int))
       malloc(sizeof(int *))
(int *)malloc(sizeof(int))
Run Code Online (Sandbox Code Playgroud)

c memory malloc allocation

21
推荐指数
2
解决办法
6万
查看次数

什么是realloc()的C++版本,分配新缓冲区并复制旧缓冲区中的内容?

在我们使用的C中malloc(), free(),但是在C++中你使用new, delete,但在C中我们也有realloc,它将分配新块并复制旧数据(常见的最小值),然后释放旧数据块.那么那个C++版本是什么?我当然可以写自己的,但是有内置的东西吗?

main() {
  int i; char *x = malloc(3);
  x[0] = 10;
  x[1] = 20;
  x[2] = 30;
  realloc(x, 4);
  x[3] = 40;
  for (i = 0; i < 4; i++) printf("%i\n", x[i]);
}
Run Code Online (Sandbox Code Playgroud)

c++ malloc

21
推荐指数
2
解决办法
2万
查看次数

何时将内存分配给char*

我有点困惑何时将内存分配给char*以及何时将其指向const字符串.

是的,我明白如果我想修改字符串,我需要分配内存.

但是在我不希望修改我指向的字符串并且只需要传递值的情况下,我应该执行以下操作?与分配内存相比,以下步骤有哪些缺点malloc

char *str = NULL;

str = "This is a test";

str = "Now I am pointing here";
Run Code Online (Sandbox Code Playgroud)

c string malloc pointers const

21
推荐指数
3
解决办法
2199
查看次数

C:使用malloc扩展数组

我对malloc和C有点新意.我想知道如果需要的话我可以用malloc扩展一个固定大小的数组的大小.

例:

#define SIZE 1000
struct mystruct
{
  int a;
  int b;
  char c;
};
mystruct myarray[ SIZE ];
int myarrayMaxSize = SIZE;
....
if ( i > myarrayMaxSize )
{
   // malloc another SIZE (1000) elements
   myarrayMaxSize += SIZE;
}
Run Code Online (Sandbox Code Playgroud)
  • 上面的例子应该说明我想要完成的事情.

(顺便说一句:我需要这个用于我编写的解释器:使用固定数量的变量,如果需要更多变量,只需动态分配它们)

c arrays malloc

20
推荐指数
3
解决办法
4万
查看次数