memory相关内容

VS malloc的自定义分配器:的malloc有很大的开销。为什么?

我有,现在有两种不同版本的内存分配系统的图像融为一体pression应用。在原单,malloc的使用无处不在,而在第二个,我实现了一个简单的池分配器,刚分配的内存块,并返回内存myalloc的部分()调用。 我们已经注意到一个巨大的内存开销时使用的malloc:在它的内存使用情况的高度,的malloc()code需要一个1920x1080x16bpp图像约170兆内存,而池分配器刚分配48兆字节 ..
发布时间:2016-08-18 13:09:34 C/C++

如何检测在C / C ++程序可能/潜在的堆栈溢出的问题?

有没有看到你的应用程序的堆栈空间有多大有什么堆栈使用的最高水印是在运行过程中?标准方式, 此外,在实际的溢出会发生什么可怕的呢? 它会崩溃,触发异常或信号?有没有一个标准或者是它在所有的系统和编译器有什么不同? 我在Windows,Linux和Macintosh寻找具体。 解决方案 在窗口堆栈溢出的例外将产生。 下面的窗口code说明了这一点: 的#include<&std ..
发布时间:2016-08-18 12:52:05 C/C++开发

如何是只读的C实现内存?

我听说在C,如果我做 的char * s =“Hello World”的。 这个“Hello World”实际上是存储在只读存储器。 我不是只读存储器那么清晰。是什么解释?是,像一个标志,编译器告诉编译器不写到段? 解决方案 这不是 C语言的一个特征而是一个编译器/连接器和操作系统协同工作的功能。 在编译这样code会发生以下情况: 编译器将会把字符串放到只读数据段。 链接器 ..
发布时间:2016-08-18 12:50:04 C/C++

什么posix_memalign / memalign可办

我想了解什么功能 memalign可()和 posix_memalign()做的。读取现有的文件没有帮助。 有人可以帮助我理解它是如何工作的,并用于是什么?或者,也许提供了一个使用例子? 我想了解Linux的内存作品,我需要写我自己的简单的内存池(低碎片堆)。 解决方案 而的malloc 为您提供了可能有任何对齐内存块(唯一的要求是,它必须为最大的基本数据类型实现所支持)对齐, pos ..
发布时间:2016-08-18 12:47:45 C/C++

分配内存以字符***用C

所以,我有分配中的字符内存的麻烦*** 类型的变量。我的目标是创建一个字符串的矩阵和code我目前有内存分配如下: 字符***矩阵;矩阵=释放calloc(N * MAX_STR,sizeof的(字符**)); 对于(Z = 0; z,其中; N; Z ++){ 矩阵[Z] =释放calloc(N,sizeof的(字符*)); 对于(i = 0; I< MAX_STR;我+ ..
发布时间:2016-08-17 23:39:49 C/C++

为什么用C释放结构仍然有数据吗?

当我运行这个code: 的#include<&stdio.h中GT;typedef结构液态食品 { CHAR名称[128]; } 餐饮;INT 主(INT ARGC,字符** argv的) { 食品*食物;食物=(食品*)malloc的(sizeof的(食品)); 的snprintf(食品 - >名,128,“%S”,“玉米”);免费食物);的printf(“%d个\ ..
发布时间:2016-08-17 23:38:44 C/C++

结构在内存大小而异?

为什么不在第一壳体12? 测试在:gcc和铿锵的最新版本,64位的Linux 结构说明 { INT **部分; INT NR; }; 的sizeof(DESC);输出:16 结构说明 { INT **部分; }; 的sizeof(DESC);输出:8 结构说明 { INT NR; }; 的sizeof(DESC);输出:4 解决方案 ..
发布时间:2016-08-17 23:34:50 C/C++

我免费的char *应使用初始化的字符串字面量?

我应该释放的char * 变量的时候,他们用字符串初始化了?对我来说,语法将导致我,他们只是堆栈分配的假设,但这个例子给我看,他们不是。 的#include<&stdlib.h中GT; #包括LT&;&stdio.h中GT;静态字符* globalBuffer;typedef结构{集装箱 字符*缓冲区; } 容器;集装箱* Container_new(字符*缓冲区){ 集装 ..
发布时间:2016-08-17 23:25:19 C/C++

检查快捷方式,如果字符数组为零

我有个字节的数组,在存储器中。什么是看是否在阵列中的所有字节都是零的最快方法? 解决方案 目前,短期使用 SIMD 扩展(如x86处理器 SSE ),你还不如迭代这个数组并每个值比较为0。 在遥远的过去下,执行用于该阵列(除了回路分支本身)中的每个元素的比较和条件分支将被认为是昂贵的,这取决于如何经常(或早),你可以期望一个非零元素出现在阵中,你可能会选到完全的离不开循环内部条件语句,仅 ..
发布时间:2016-08-17 23:21:50 C/C++

如何处理realloc的由于内存时失败?

问题说,这一切,但这里有一个例子: typedef结构mutable_t { 诠释计数,最大值; 无效**数据; } mutable_t; 无效pushMutable(mutable_t * M,void *的对象) { 如果(M>计数== M->最大){ M->最大* = 2; M->数据=的realloc(M& ..
发布时间:2016-08-17 23:19:25 C/C++

如何检查堆大小在Linux上的过程

我在写一些code和它保持崩溃。挖转储后,后来我意识到我是超调的最大堆限制(生活本来就容易,如果我加在的malloc检查)。虽然我固定的,有没有什么办法来增加我的堆大小? PS:相当类似的问题在这里,但回复我不清楚。 解决方案 堆通常是因为你的体系结构可寻址的虚拟内存一样大。 您应该检查你的系统与的ulimit -a 命令电流限值,并寻求这条线最大内存大小(千字节,-m)3008828 ..
发布时间:2016-08-17 23:17:46 服务器开发

既然不能返回一个局部变量,什么是从C或C ++函数返回一个字符串的最好方法?

作为后续这个问题: 这是我所看到的,这应该按预期工作: 迎接无效(){ 焦C [] =“你好”; greetWith(C); 返回; } 但这样会导致未定义的行为:的char *迎(){ 焦C [] =“你好”; 返回℃; } 如果我是正确的,什么是解决第二greet函数的最好方法?在嵌入式环境中?在桌面? 解决方案 您是绝对正确的。在第二个例子中你的C数组被分 ..
发布时间:2016-08-17 23:13:17 C/C++开发

什么是指针的大小?究竟是依靠什么?

我在网上搜索,虽然我能找到一些讨论,我没有找到一个COM prehensive描述。因此,如果任何人都可以形成占地约一个指针的大小一切的答案,这将是很大的帮助。答案至少应覆盖以下主题 什么是一个指针的大小取决于? 什么功能架构的影响指针的大小? (详细) 编译器如何影响指针的大小? 解决方案 一个指针是一个高层次的语言提供了一个抽象的;在理论上它可以是任何宽度的。这是完全在编译器 ..
发布时间:2016-08-17 23:12:54 C/C++开发

如何在C编程语言手动分配指针地址?

如何用C编程语言手动分配指针地址? 例如内存地址是0x28ff44 解决方案 这样的: 无效* P =(无效*)0x28ff44; 或者,如果你想把它当作一个的char * :的char * p =(字符*)0x28ff44; ...等。 如果你指着东西,你真的,真的不是为了改变,添加一个常量:常量无效* P =(常量无效*)0x28ff44; 为const char * p ..
发布时间:2016-08-17 23:07:04 C/C++

在C或C ++,你可以分配的内存(4GB&GT)一个非常大的单块?

使用非常大量的内存,这些天我在想,有可能分配一个单独的内存块是大于4GB?或者,我需要分配一串更小的块,并处理它们之间进行切换? 为什么? 我正在处理一些OpenStreetMap的XML数据,并将这些文件是巨大的。我目前流他们因为我不能加载它们都在一个块,但我刚好奇的malloc的或新的上限。 解决方案 简短的回答:不太可能。 为了这个工作,你绝对会的包含以使用64位处理器。 其 ..
发布时间:2016-08-17 23:04:43 C/C++开发

分配更多的内存比使用有存在的malloc

这code段将在每次读取标准输入字母“U”的时间分配2GB,而一旦它读取'A'将初始化所有分配的字符。 的#include<&iostream的GT; #包括LT&;&stdlib.h中GT; #包括LT&;&stdio.h中GT; #包括LT&;矢量> #定义2147483648字节 使用命名空间std; 诠释的main() { 字符输入[1]; 矢量<字符* ..
发布时间:2016-08-17 23:00:50 服务器开发

我怎么可以存储在内存中的特定位置的价值?

也许这是一个简单的问题的问题,但我真的想知道这是肯定的。 如果我想要存储的值,比如一个int,在内存中的特定地址(在堆),我该怎么办呢? 说,我要的int值10在0x16存储。我猜通过调用new或malloc的这样做:为int * p = INT新(10);然后我想存储的值的地址设置和Ox16。起初我以为只是像&安培; P = 0x16但这不起作用。我需要这样做存储在内存中的特定值的前面一些附 ..
发布时间:2016-08-17 22:51:27 C/C++开发