memory-management相关内容

为什么NULL / 0非法的内存位置,对于一个对象?

我理解的目的 NULL 常数C / C ++,我的理解,它需要重新presented的部分的内部方式 我的问题是:是否有一些根本原因的0地址将是一个无效的内存位置的C / C ++对象?还是我们的在理论上“浪费”的内存一个字节,由于此预订吗? 解决方案 空指针实际上并不必须是0。它在C规格保证在一个恒定的0值指针的背景下被赋予它被视为由编译器为空,但是如果你做 字符*富=(无效*)1; ..
发布时间:2016-08-18 14:01:16 C/C++开发

它是更好地两种动力分配内存?

当我们使用的malloc()来分配内存,我们应该给它的大小是两种力量?或者,我们只是给我们所需要的确切大小? 如同 //的char * PTR =的malloc(200); 字符* PTR =的malloc(256); //,而不是200,我们使用256 如果这是更好地给大小是两种力量,究竟是什么原因呢?为什么好? 感谢 修改 我困惑的原因是以下乔尔的博客歌姬报价 聪 ..
发布时间:2016-08-18 13:55:36 C/C++

为什么内存分配堆远远超过堆栈慢?

有人告诉我很多次。但我不知道为什么...什么从堆中分配内存时需要支付额外费用涉及?它是硬件相关的?这是否与CPU周期?因此,许多猜测,但没有确切的答案......可能有人给我一些阐述? 就像“开卷”之称,堆数据结构比堆栈更复杂。而在我看来,一些内存空间分配给一个线程作为它的堆栈时,它开始运行,而堆是由一个进程内的所有线程共享。这种模式需要一些额外的机制来管理共享堆的每个线程的使用,比如垃圾收集。 ..
发布时间:2016-08-18 13:54:16 C/C++

如何像堆,栈,文字的不同环节涉及到的物理内存?

在一个C程序进行编译和创建目标文件(ELF)。目标文件中包含不同的部分,如BSS,数据,文字等段。我理解的是,ELF的这些部分是虚拟内存地址空间的一部分。我对吗?请纠正我,如果我错了。 此外,将有与编译程序相关联的虚拟存储器和页表。页表加载程序时,在ELF虚拟内存地址present关联到真实的物理内存地址。是我的理解是否正确? 我看了,在创建ELF文件,BSS部分只是保持未初始化的全局 ..
发布时间:2016-08-18 13:52:15 C/C++

什么是减少使用C内存使用的一些最佳做法?

有哪些“内存高效的C编程”的一些最佳实践。 主要用于嵌入式/移动设备应该是什么具有低内存消耗的指导方针? 我想应该有一个)code记忆B)数据存储单独的准则 解决方案 在C,在一个简单得多的水平,考虑以下; 使用#pragma pack(1)字节对齐的结构 使用工会,其中一个结构可以包含不同的数据类型 使用位字段,而不是整数来存储标志和小整数 避免使用固定长度的字符数组来存 ..
发布时间:2016-08-18 13:47:34 C/C++

什么是“记忆跺脚”?

我刚刚碰到这个博客帖子其中提到“踩内存 “ C ++程序是很容易能够跺脚内存 (你可能从来没有听说过,如果你是的 出生在一个管理code的世界。) 事实上,我从来没有听说过呢! 那么,这是什么,是内存跺脚,跺脚的记忆?它发生的时候? 解决方案 内存“践踏”的时候了一块code操纵内存,而没有意识到另一块code的使用内存的方式,冲突。有几种常用的方法内存可以跺着脚。 一 ..
发布时间:2016-08-18 13:47:22 C/C++开发

二维字符数组的动态内存

我宣布一个数组 焦炭** ARR; 如何初始化二维字符数组的内存。 解决方案 一种方法是做到以下几点: 的char ** ARR =(字符**)释放calloc(num_elements,sizeof的(字符*));对于(i = 0; I< num_elements;我++) { 改编[I] =(字符*)释放calloc(num_elements_sub,sizeof的 ..
发布时间:2016-08-18 13:21:54 C/C++

MMAP为/ dev /零

说我使用的/ dev / zero的如下分配与MMAP大的内存(40MB)。 FD =打开(“/开发/零”,O_RDWR); 一个= MMAP(0,4096e4,PROT_READ | PROT_WRITE,MAP_PRIVATE | MAP_FILE,FD,0); 我不解的是,内核将初始化回忆到零页面被带入物理内存(我假设现代Linux内核使用的按需分页的)。因此,例如,当第一页被触摸, ..
发布时间:2016-08-18 13:17:27 服务器开发

从分配内核的用户存储空间

我试图调用 sys_readlink(为const char * __user路径,焦炭__user * BUF,INT BUFSIZ) 直接,但得到EFAULT错误code。出现此错误的原因的 BUF 的从内核空间指向的内存。 那么,有没有从内核分配用户存储空间可能的方式? 的kmalloc(大小,GFP_USER)类似于的kmalloc(大小,GFP_KERNEL) 并返回指针到内核 ..
发布时间:2016-08-18 13:16:05 服务器开发

被SIGSEGV传递到每个线程?

我在Linux的一个程序,它是多线程的。有些情况下,我很感兴趣,看看他们是否已经在一定时间内书面某​​些内存区域。对于我给只读访问这些内存页和安装SIGSEGV的信号处理程序。现在的问题是,将每个线程调用信号处理程序本身。说线程1写入禁止某些内存区域,会是执行信号处理的人? 解决方案 中首先 信号性格是进程范围; 进程中的所有线程共享 相同配置的每个信号。如果 一个线程使用的s ..
发布时间:2016-08-18 13:12:55 服务器开发

为什么释放calloc需要两个参数,malloc的只有一个?

这是非常麻烦的,我写的释放calloc(1,sizeof的(MYSTRUCT))所有的时间。我不想使用类似包装这个方法等。我的意思是我想知道两个参数给了我一个想法?如果它给的东西,为什么不的malloc 有两个参数呢? 顺便说一句,我搜索了回答这个问题,但我没有找到一个很好的答案。这些问题的答案是,释放calloc 可以比的malloc 能等。分配更大的块 我看到了另一个答案释放calloc ..
发布时间:2016-08-18 13:12:41 C/C++

当您尝试释放(c)中已经释放的内存会发生什么?

例如: 的char * myString的=的malloc(sizeof的(char)的* STRING_BUFFER_SIZE); 免费(myString的); 免费(myString的); 是否有这样做的任何不良副作用? 解决方案 下面的篇章,段落。 如果参数[到免费功能]不匹配前面返回的指针释放calloc ,的malloc 或 的realloc 函数,或者如果空间已 ..
发布时间:2016-08-18 13:11:07 C/C++

通过调用API JNI内存管理

当我使用JNI方法建立一个Java对象,以它作为参数传递给Java方法,我使用JNI调用API调用,我该如何管理自己的内存? 下面就是我与工作: 我有了析构函数方法是比较复杂的一个C对象免费()。这个C对象要与一个Java对象相关联,一旦应用程序与Java对象完了,我对C的对象不再需要。 我创建的Java对象,像这样(检查省略为清楚起见错误): c_object = c_object_c ..
发布时间:2016-08-18 13:03:28 Java开发

为什么用C使用malloc当您指定的大小?

看看下面code: 为int * p =的malloc(2 * sizeof的* P);P [0] = 10; //使用两个空格我 P [1] = 20; //之前使用malloc分配。P [2] = 30; //使用,我没有分配给另一个空间。输出(“%d个”,*(P + 1)); //正确打印20 输出(“%d个”,*(P + 2)); //此外,正确打印30 ..
发布时间:2016-08-18 13:00:38 C/C++

它是很好的做法,以释放在C中的NULL指针?

可能重复:结果 是否免费(PTR)其中PTR为NULL损坏内存? 我正在写释放的指针,如果它是的malloc()版的C函数。指针可以是NULL(在发生错误和code没有得到任何分配机会的情况下)或分配的malloc()。是安全的使用免费(PTR); 而不是如果(PTR!= NULL)免费(PTR); ? GCC 不抱怨可言,甚至与 -Wall -Wextra -ansi -pedanti ..
发布时间:2016-08-18 13:00:07 C/C++

怎样的realloc和memcpy工作?

亲爱的,这里是我的问题... 1做的realloc和memcpy阵列中的复制项到另一个的方式更快的不仅仅是遍历每个元素O(N)?如果答案是肯定的话,你认为什么是它的复杂性? 2 - 如果分配的大小比原来的尺寸小,不realloc的条目复制到别的地方或刚刚离开他们,因为他们正在减少数组的大小? 太感谢了。 解决方案 1 - 他们一次复制的块号。见的http://www.embedded ..
发布时间:2016-08-18 12:51:15 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 / C ++或以任何其他这样的语言变量或数据类型返回什么类型的地址?

这是一个非常基本的问题令人难以置信的头脑,因为我听说过虚拟和物理内存的概念在我的OS类概念的那一天。现在我知道,在加载时和编译时,虚拟地址和逻辑ADRESS约束力的方案是相同的,但在执行时它们之间的区别。 首先,为什么是它有利于产生在编译和加载时间的虚拟地址,当我们运用符号运算符来获得一个变量的地址,天真的数据类型,用户定义类型和函数定义的地址返回什么? 和如何做OS究竟地图从虚拟到物理地址时 ..
发布时间:2016-08-17 23:38:15 C/C++开发

内核内存零?

我使用Debian的挤压,并已经注意到,内存始终是零。这是新的linux发行版?前一段时间,我相信我可以利用看跌期权()和垃圾将被输出。 我运行这个测试程序很多次,但在评价结果总是相同的。 (我有randomize_va_space = 2 sysctl.conf的,所以我知道,内存在不同的地点是在每次运行使用。) 字符* A =的malloc(5000); 一个[49999999] ='\ ..
发布时间:2016-08-17 23:36:11 C/C++