相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

免费如何知道免费多少?

在C编程中,您可以将任何类型的指针作为参数传递给free,它如何知道要释放的已分配内存的大小?每当我传递指向某个函数的指针时,我也必须传递大小(即10个元素的数组需要接收10作为参数来知道数组的大小),但我不必将大小传递给自由功能.为什么不,并且我可以在我自己的函数中使用相同的技术来避免需要购买数组长度的额外变量?

c size free pointers

361
推荐指数
4
解决办法
6万
查看次数

了解Linux/proc/id/maps

我试图了解我的嵌入式Linux应用程序的内存使用情况.该/proc/pid/maps实用程序/文件似乎是看到细节的好资源.不幸的是,我不理解所有列和条目.

/proc/pid/maps实用程序/文件是否有良好的资源/文档?

匿名inode 0条目是什么意思?这些似乎是一些较大的内存段.

linux embedded

143
推荐指数
4
解决办法
11万
查看次数

malloc()是如何在内部实现的?

任何人都可以解释malloc()内部如何运作

我有时会这样做strace program,我看到很多sbrk系统调用,正在man sbrk讨论它的使用情况,malloc()但不多.

c memory malloc system-calls sbrk

112
推荐指数
3
解决办法
12万
查看次数

free和malloc如何在C中工作?

我试图找出如果我试图从中间"释放"指针会发生什么,请看下面的代码:

char *ptr = (char*)malloc(10*sizeof(char));

for (char i=0 ; i<10 ; ++i)
{
    ptr[i] = i+10;
}
++ptr;
++ptr;
++ptr;
++ptr;
free(ptr);
Run Code Online (Sandbox Code Playgroud)

我收到一个崩溃,出现未处理的异常错误消息.我想了解为什么以及如何免费工作,这样我不仅知道如何使用它,而且还能够理解奇怪的错误和异常并更好地调试我的代码ץ

非常感谢

c memory malloc free

58
推荐指数
6
解决办法
7万
查看次数

在malloc期间内核中会发生什么?

我在接受采访时被问到这个问题.他们想知道的是当用户调用malloc(4)来分配4个字节的内存时,操作系统(Linux)如何响应?哪个子系统响应此系统调用?

我告诉他malloc()将由内存管理子系统提供服务.malloc()实现将遍历空闲内存(物理内存)列表,我们将其称为空闲列表,并找到大于或等于4字节的适当块.一旦找到这样的块,它将从空闲列表中删除并添加到使用的列表中.然后,该物理内存将映射到进程堆vma结构.他似乎对这个答案并不满意.伙伴系统如何适应这个?任何帮助将不胜感激.

c linux heap system process

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

C free()如何工作?

可能重复:
malloc()和free()如何工作

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

int * alloc()
{
    int *p = (int *)calloc(5,4);
    printf("%d\n",p);
    return p;
}

int main()
{
 int *p = alloc();

 free(p);
 printf("%d\n",p);
 p[0] = 1;
 p[1] = 2;
 printf("%d %d\n",p[0],p[1]);
}
Run Code Online (Sandbox Code Playgroud)

至于代码段,我先分配5个整数.然后我释放了记忆.当我打印p时,为什么p sill的值与首先分配的内存地址相同?我也可以为p [0]和p [1]赋值.这是否意味着free()什么都不做?一旦我分配了内存,我可以稍后使用虽然我已经释放了它.

c free memory-management

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

为什么CudaFree似乎没有释放内存?

我正在尝试分配设备内存,复制到它,在GPU上执行计算,将结果复制回来然后释放我分配的设备内存.我想确保我没有超出限制,我想看看我是否在共享内存空间中有足够的内存来转储一些数组.

当我分配设备内存时,不会返回任何错误.当我cudaMemGetInfo用来检查分配的内存量时,看起来好像cudaMalloc没有分配任何内存.此外,当我尝试释放内存时,看起来只有一个指针被释放.

我正在使用matlab Mexfunction接口来设置GPU内存并启动内核.此时,我甚至没有调用内核,只返回结果的单位矩阵.

cudaError_t cudaErr;
size_t freeMem = 0;
size_t totalMem = 0;
size_t allocMem = 0;
cudaMemGetInfo(&freeMem, &totalMem);  
mexPrintf("Memory avaliable: Free: %lu, Total: %lu\n",freeMem, totalMem);  

/* Pointers for the device memory */
double *devicePulseDelay, *deviceTarDistance, *deviceScattDistance, *deviceScatterers;
double *deviceReceivedReal, *deviceReceivedImag;

/* Allocate memory on the device for the arrays. */
mexPrintf("Allocating memory.\n");
cudaErr = cudaMalloc( (void **) &devicePulseDelay, sizeof(double)*512);
if (cudaErr != cudaSuccess)
{
    mexPrintf("could not allocate memory to devicePulseDelay\n");
    mexPrintf("Error: %s\n",cudaGetErrorString(cudaErr));
} …
Run Code Online (Sandbox Code Playgroud)

memory free cuda

8
推荐指数
1
解决办法
7507
查看次数

WebWorkers和异步共享数据访问.如何在Scala.js?

请考虑一个Scala.js类,它包含一个名为xArr的大型JavaScript 类型数组.

这个过程被称为 P(xArr)消耗xArr作为输入,但需要很长的时间才能完成.为了避免脚本超时警告,p(xArr)在Web Worker中运行.

回想一下主线程和Web Worker线程之间通信的这些限制:

  1. 任何一个方向的通信都采用消息传递的形式.
  2. 消息数据必须符合JavaScript的结构化克隆算法的要求.
  3. 除非在可选传输列表中指定,否则消息数据将被复制,而不是传输到主线程和工作线程.
  4. 要传输消息数据而不是将其复制到工作线程或从工作线程复制,数据必须实现Transferable接口,并且传输列表必须包含对可传输数据的引用.
  5. 如果可转移对象在线程之间传输,则发送线程将失去对它的访问权.

由于xArr的大小,将其副本发送到工作线程将导致严重的内存成本,但由于p(xArr)的运行时间,它无法在主线程中运行.

幸运的是,类型数组实现转换接口,因此,以节省计算和存储器资源,所述程序调用P(xArr)通过转移xArr到调用WebWorker P(xArr)然后传送xArr回主线程.

不幸的是,主线程中的其他异步方法必须访问xArr,它可能在调用时传输到工作者的作用域.

什么Scala语言功能可以控制对xArr的访问,以便方法调用在主线程拥有xArr时立即执行,但等待它在工作者拥有xArr时返回范围?

换句话说:你如何处理一个连续在定义未定义之间交替的类变量?

你会建议锁吗?承诺/回拨队列?你会以完全不同的方式解决问题吗?如果是这样,怎么样?

请记住,这是一个Scala.js库,因此我们必须取消对JVM特定功能的限制.

javascript asynchronous scala web-worker scala.js

8
推荐指数
1
解决办法
520
查看次数

Boost池分配器比新的慢

所以我memory_pools基于boost池创建了这个容器分配器类:

memory_pools.hpp

#ifndef MEMORY_POOL_HPP
# define MEMORY_POOLS_HPP

// boost
# include <boost/pool/pool.hpp>
# include <boost/unordered_map.hpp>

template<typename ElementType>
class   memory_pools
{
public:
  template <typename>
  friend class memory_pools;

private:
  using pool = boost::pool<>;

public:
  using value_type = ElementType;
  using pointer = value_type*;
  using const_pointer = const value_type*;
  using reference = value_type&;
  using const_reference = const value_type&;
  using size_type = pool::size_type;
  using difference_type = pool::difference_type;

public:

  template<typename OtherElementType>
  struct rebind
  {
    using other = memory_pools<OtherElementType>;
  };

public:
  memory_pools();

  template<typename SourceElement>
  memory_pools(const …
Run Code Online (Sandbox Code Playgroud)

c++ performance performance-testing boost-pool

7
推荐指数
1
解决办法
5342
查看次数