草庐IT

malloced

全部标签

windows - 64 位大型 malloc

malloc()失败的原因是什么,尤其是在64位中?我的具体问题是试图在64位系统上分配10GB的巨大RAMblock。这台机器有12GB的RAM和32GB的交换空间。是的,malloc是极端的,但为什么会有问题呢?这是在带有Intel和MSFT编译器的WindowsXP64中。malloc有时会成功,有时不会,大约50%。8GBmalloc总是有效,20GBmalloc总是失败。如果malloc失败,重复请求将不起作用,除非我退出该进程并再次启动一个新进程(然后将有50%的成功率)。没有其他大型应用程序正在运行。它甚至在重新启动后立即发生。如果您用完了可用的32(或31)位地址空间,

c - 如果我在同一个指针 (C) 上使用 malloc 两次会发生什么?

例如,我创建了一个指针newPtr并使用malloc(somesize),然后我再次使用malloc(somesize)和相同的指针。怎么了?然后我会创建与第一个相同大小的第二个内存块吗?newPtr是否指向同一个地址?例子:int*newPtr;newPtr=malloc(10*sizeof(int));newPtr=malloc(10*sizeof(int)); 最佳答案 您的程序将发生内存泄漏。newPtr的第一个值将丢失,您将无法free它。Amithencreatingasecondblockofmemorythesame

c - 如果我在同一个指针 (C) 上使用 malloc 两次会发生什么?

例如,我创建了一个指针newPtr并使用malloc(somesize),然后我再次使用malloc(somesize)和相同的指针。怎么了?然后我会创建与第一个相同大小的第二个内存块吗?newPtr是否指向同一个地址?例子:int*newPtr;newPtr=malloc(10*sizeof(int));newPtr=malloc(10*sizeof(int)); 最佳答案 您的程序将发生内存泄漏。newPtr的第一个值将丢失,您将无法free它。Amithencreatingasecondblockofmemorythesame

我可以依靠 malloc 返回 NULL 吗?

我在Unix系统上读到,即使内存实际上不可用,malloc也可以返回非NULL指针,并且稍后尝试使用内存会触发错误。由于我无法通过检查NULL来捕获这样的错误,我想知道检查NULL到底有多大用处?在相关的说明中,HerbSutter说处理C++内存错误是徒劳的,因为系统会在异常实际发生之前很久就进入分页痉挛状态。这也适用于malloc吗? 最佳答案 引用Linuxmanuals:Bydefault,Linuxfollowsanoptimisticmemoryallocationstrategy.Thismeansthatwhenma

我可以依靠 malloc 返回 NULL 吗?

我在Unix系统上读到,即使内存实际上不可用,malloc也可以返回非NULL指针,并且稍后尝试使用内存会触发错误。由于我无法通过检查NULL来捕获这样的错误,我想知道检查NULL到底有多大用处?在相关的说明中,HerbSutter说处理C++内存错误是徒劳的,因为系统会在异常实际发生之前很久就进入分页痉挛状态。这也适用于malloc吗? 最佳答案 引用Linuxmanuals:Bydefault,Linuxfollowsanoptimisticmemoryallocationstrategy.Thismeansthatwhenma

c - alloc、malloc 和 alloca — 有什么区别?

我的印象是Objective-C中的alloc(当我们调用[anyObjectalloc]实际上是在实现C函数malloc和内存在堆中分配,但在任何地方都找不到答案。另外,在搜索alloc时,我发现alloc在堆栈中分配内存。如果我没记错的话,alloc在堆中分配内存来创建对象。那么,alloc和malloc(以及alloc)有什么区别呢?谁能总结一下? 最佳答案 alloc()不是标准C库函数。一些较旧的编译器和库包含提供一些内存分配功能的库,但这不是标准的。MicrosoftVisualC++运行时包括Alloc()函数有点类似

c - alloc、malloc 和 alloca — 有什么区别?

我的印象是Objective-C中的alloc(当我们调用[anyObjectalloc]实际上是在实现C函数malloc和内存在堆中分配,但在任何地方都找不到答案。另外,在搜索alloc时,我发现alloc在堆栈中分配内存。如果我没记错的话,alloc在堆中分配内存来创建对象。那么,alloc和malloc(以及alloc)有什么区别呢?谁能总结一下? 最佳答案 alloc()不是标准C库函数。一些较旧的编译器和库包含提供一些内存分配功能的库,但这不是标准的。MicrosoftVisualC++运行时包括Alloc()函数有点类似

c - 如果 malloc 失败了怎么办?

如果malloc分配失败,我们应该再试一次吗?在这样的情况下:char*mystrdup(constchar*s){char*ab=NULL;while(ab==NULL){ab=(char*)malloc(strlen(s)+1);}strcpy(ab,s);returnab;}while循环对于检查内存分配是否有效? 最佳答案 一般来说,现代的malloc()实现将返回NULL仅作为绝对的最后手段,再试一次肯定无济于事。唯一有用的是释放一些内存,然后再试一次。如果您的应用程序拥有任何消耗性资源,那么现在是释放它们的时候了,然后再

c - 如果 malloc 失败了怎么办?

如果malloc分配失败,我们应该再试一次吗?在这样的情况下:char*mystrdup(constchar*s){char*ab=NULL;while(ab==NULL){ab=(char*)malloc(strlen(s)+1);}strcpy(ab,s);returnab;}while循环对于检查内存分配是否有效? 最佳答案 一般来说,现代的malloc()实现将返回NULL仅作为绝对的最后手段,再试一次肯定无济于事。唯一有用的是释放一些内存,然后再试一次。如果您的应用程序拥有任何消耗性资源,那么现在是释放它们的时候了,然后再

c - malloc(sizeof(int)) vs malloc(sizeof(int *)) vs (int *)malloc(sizeof(int))

我承认这三个都有不同的含义。但是,我不明白这些具体情况适用于哪些特定情况。任何人都可以分享每个例子吗?谢谢。malloc(sizeof(int))malloc(sizeof(int*))(int*)malloc(sizeof(int)) 最佳答案 malloc(sizeof(int))表示您正在从堆中分配空间来存储int。您将保留int所需的尽可能多的字节。这会返回一个你应该转换为int*的值。(指向int的指针。)正如一些人所指出的,C中的典型做法是让隐式转换来处理这个问题。malloc(sizeof(int*))表示您正在从堆中