草庐IT

c - free() 之后内存会发生什么变化?

我知道在您的硬盘驱动器上,如果您删除文件,数据不会(立即)消失。数据仍然存在,直到被覆盖。我想知道内存中是否存在类似的概念。假设我为一个字符串分配了256个字节,在我free()直到它被覆盖之后,该字符串是否仍然漂浮在内存中? 最佳答案 你的比喻是对的。内存中的数据不会消失或类似的东西;在free()之后,这些值可能确实仍然存在,尽管尝试从释放的内存中读取是未定义的行为。 关于c-free()之后内存会发生什么变化?,我们在StackOverflow上找到一个类似的问题:

c - 释放分配给 char* (由 `malloc` 分配)的 int* 是否会调用未定义的行为?

标题可能令人困惑。假设str是一个由malloc分配的指针。ptr,类型为int*,被分配给它并被释放,如下面的代码片段所示:char*str=malloc(64);int*ptr=str;free(ptr);我试图编译上面的代码。它只是给出一个警告:source_file.c:Infunction‘main’:source_file.c:10:16:warning:initializationfromincompatiblepointertypeint*ptr=str;^上面的代码是否调用了未定义的行为?上面的代码片段是否释放了malloc为str分配的内存?

c - 释放分配给 char* (由 `malloc` 分配)的 int* 是否会调用未定义的行为?

标题可能令人困惑。假设str是一个由malloc分配的指针。ptr,类型为int*,被分配给它并被释放,如下面的代码片段所示:char*str=malloc(64);int*ptr=str;free(ptr);我试图编译上面的代码。它只是给出一个警告:source_file.c:Infunction‘main’:source_file.c:10:16:warning:initializationfromincompatiblepointertypeint*ptr=str;^上面的代码是否调用了未定义的行为?上面的代码片段是否释放了malloc为str分配的内存?

c - fclose() 然后是 free()?

假设我有以下程序:#includeintmain(){FILE*pFile;pFile=fopen("myfile.txt","r");fclose(pFile);//Thisneverhappens:free(pFile)return0;}我从未见过在关闭文件句柄后执行free(pFile)的程序。这是为什么呢?我知道由于fclose()没有收到指向pFile的指针,因此它实际上并没有释放指针的内存。我的印象是,如果指针指向动态分配的内存,则应该始终释放它们的内存。为什么没有人free()文件指针? 最佳答案 free被调用以响应

c - fclose() 然后是 free()?

假设我有以下程序:#includeintmain(){FILE*pFile;pFile=fopen("myfile.txt","r");fclose(pFile);//Thisneverhappens:free(pFile)return0;}我从未见过在关闭文件句柄后执行free(pFile)的程序。这是为什么呢?我知道由于fclose()没有收到指向pFile的指针,因此它实际上并没有释放指针的内存。我的印象是,如果指针指向动态分配的内存,则应该始终释放它们的内存。为什么没有人free()文件指针? 最佳答案 free被调用以响应

c - malloc()/free() 的对齐限制

我读过的较早的K&R(第2版)和其他C语言文本讨论了malloc()和free()通常也会顺便提及一些关于数据类型对齐限制的事情。显然,某些计算机硬件架构(CPU、寄存器和内存访问)限制了您如何存储和处理某些值类型。例如,可能要求4字节(long)整数必须从四的倍数地址开始存储。主要平台(英特尔和AMD、SPARC、Alpha)对内存分配和内存访问施加了哪些限制(如果有),或者我可以放心地忽略在特定地址边界上对齐内存分配吗? 最佳答案 Sparc、MIPS、Alpha和大多数其他“经典RISC”架构仅允许对齐访问内存,即使在今天也是

c - malloc()/free() 的对齐限制

我读过的较早的K&R(第2版)和其他C语言文本讨论了malloc()和free()通常也会顺便提及一些关于数据类型对齐限制的事情。显然,某些计算机硬件架构(CPU、寄存器和内存访问)限制了您如何存储和处理某些值类型。例如,可能要求4字节(long)整数必须从四的倍数地址开始存储。主要平台(英特尔和AMD、SPARC、Alpha)对内存分配和内存访问施加了哪些限制(如果有),或者我可以放心地忽略在特定地址边界上对齐内存分配吗? 最佳答案 Sparc、MIPS、Alpha和大多数其他“经典RISC”架构仅允许对齐访问内存,即使在今天也是

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

我正在尝试分配设备内存,复制到它,在GPU上执行计算,将结果复制回来,然后释放我分配的设备内存。我想确保我没有超出限制,我想看看共享内存空间中是否有足够的内存来转储一些数组。当我分配设备内存时,没有返回错误。当我使用cudaMemGetInfo检查分配的内存量时,看起来一个cudaMalloc没有分配任何内存。此外,当我尝试释放内存时,似乎只释放了一个指针。我正在使用matlabMexfunction接口(interface)来设置GPU内存并启动内核。在这一点上,我什至没有调用内核,只是返回一个单位矩阵作为结果。cudaError_tcudaErr;size_tfreeMem=0;s

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

我正在尝试分配设备内存,复制到它,在GPU上执行计算,将结果复制回来,然后释放我分配的设备内存。我想确保我没有超出限制,我想看看共享内存空间中是否有足够的内存来转储一些数组。当我分配设备内存时,没有返回错误。当我使用cudaMemGetInfo检查分配的内存量时,看起来一个cudaMalloc没有分配任何内存。此外,当我尝试释放内存时,似乎只释放了一个指针。我正在使用matlabMexfunction接口(interface)来设置GPU内存并启动内核。在这一点上,我什至没有调用内核,只是返回一个单位矩阵作为结果。cudaError_tcudaErr;size_tfreeMem=0;s

c - 如何释放指针在内存中的空间?

我对C中的指针有疑问。每个指针在内存(地址)中有4个字节。当我调用malloc()它只分配内存并将其地址放入指针中,free()也只释放指针指向的内存。但是如何删除内存中不再需要的指针(4个字节)?不会有内存泄漏吗? 最佳答案 指针本身是一个常规变量,这意味着当它超出范围时,分配给它的4个字节将被自动释放,就像您可能在同一范围内声明的任何其他变量一样。 关于c-如何释放指针在内存中的空间?,我们在StackOverflow上找到一个类似的问题: https:/