码迷,mamicode.com
首页 >  
搜索关键字:地址空间    ( 1916个结果
看数据结构写代码(21) 稀疏矩阵(十字链表方式)
写完 这个例子,花费了 我不少时间,大部分时间 花费在 调试 内存问题上。 例如在销毁十字链表时,多次释放节点空间,造成 _CrtIsValidHeapPointer(pUserData) 异常。当使用malloc 分配 一个 空间时,会将这个空间的起始地址和长度 加到一个链表中去。free(p)的时候 ,会从 链表里 查找 是否 有 这个地址空间,找到了就将这个节点从链表中删除。_CrtI...
分类:其他好文   时间:2015-03-18 18:16:17    阅读次数:167
数组与串
数组是一种常用的数据结构,高级语言头提供了支持数组的基本操作,而且数组也是构成其他数据结构的重要组成。数组是N个相同元素的构成的占用一块地址连续的内存单元的有限序列。 数组的任一个元素都可以用在数组的位置来表示。数组与线性表区别:数组符合线性结构的定义。 但是区别是: 数组要求占用连续的地址空间,线...
分类:编程语言   时间:2015-03-17 17:17:42    阅读次数:186
C++内存分配方式详解——堆、栈、自由存储区、全局/静态存储区和常量存储区
栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。在一个进程中,位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数的调用。和堆一样,用户栈在程序执行期间可以动态地扩展和收缩。 堆,就是那些由new分配的内存块,他们的释放编译器不....
分类:编程语言   时间:2015-03-16 19:16:28    阅读次数:162
linux 进程地址空间的一步步探究
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的...
分类:系统相关   时间:2015-03-15 15:09:35    阅读次数:262
计算机底层知识拾遗(六)理解页缓存page cache和地址空间address_space
在这篇计算机底层知识拾遗(五)理解块IO层 中讲了块缓存buffer cache块缓存,这篇说说页缓存page cache以及相关的地址空间address_space的要点。 在Linux 2.4内核中块缓存buffer cache和页缓存page cache是并存的,表现的现象是同一份文件的数据,可能即出现在buffer cache中,又出现在页缓存中,这样就造成了物理内存的浪费。Linux ...
分类:系统相关   时间:2015-03-11 14:58:59    阅读次数:263
操作系统之内存管理1
1. 2.内存管理需要达到的目的?   1)地址保护:多道程序之间互不干扰,一个进程不能随便访问另外一个进程的地址空间。   2)地址独立:程序发出的地址与具体机器的物理主存地址是独立的。 3.为什么提出了虚拟内存?  在计算机中,一个程序要运行,必须加载到物理主存中,但是物理主存的容量是非常有限的,因此我们要把一个程序全部加载到主存,我们的每一个程序大小就要限制。另外,即使我们编写...
分类:其他好文   时间:2015-03-09 12:56:33    阅读次数:197
Linux内核源代码情景分析-系统调用brk()
首先看下进程地址空间示意图:    我们简单的说,从低地址到高地址,代码区和数据区,空洞,堆栈区。    在Linux内核源代码情景分析-内存管理之用户堆栈的扩展,我们申请了从堆栈区往下,数据区上面的页面。    在Linux内核源代码情景分析-内存管理之用户页面的换入,我们申请了用于换入/换出的页面。    在本文中,我们申请的是从数据区往上,堆栈区下面的页面。    我们通过一个实例来分析,b...
分类:系统相关   时间:2015-03-09 09:24:25    阅读次数:246
Linux x86_64进程内存空间布局
关于Linux 32位内存下的内存空间布局,可以参考这篇博文Linux下C程序进程地址空间局关于源代码中各种数据类型/代码在elf格式文件以及进程空间中所处的段,在x86_64下和i386下是类似的,本文主要关注vm.legacy_va_layout以及kernel.randomize_va_space参数影响下的进程空间内存宏观布局。情形一: vm_legacy_va_layout=1 ke...
分类:系统相关   时间:2015-03-09 00:34:17    阅读次数:568
Linux进程的堆
进程的地址空间中有很大的一块区域是被称作“堆”的区域 其地址空间是在进程的.data和.bss的地址增长方向到动态库区域的低地址部分的范围 堆可以理解成是进程的一大块内存区域(已经分配实际物理内存,但并不是所有的地址空间都分配了物理内存,其大小根据系统类型和版本来定) 用来供进程中的程序动态分配内存空间 通常,进程通过向操作系统批发一大块实际的内存空间交给glibc管理以提高动态内存请求和释放的效率 在程序要请求动态分配比较小的内存空间的时候,glibc从这一大块内存空间中分配之 当程序要请求动态分配较大的...
分类:系统相关   时间:2015-03-07 20:03:14    阅读次数:194
golang技术随笔(二)理解goroutine
进程、线程和协程要理解什么是goroutine,我们先来看看进程、线程以及协程它们之间的区别,这能帮助我们更好的理解goroutine。进程:分配完整独立的地址空间,拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程的切换只发生在内核态,由操作系统调度。 线程:和其它本进程的线程共享地址空间,拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程的切换一般也由操作系统调度(标准线程是的)。 协程...
分类:其他好文   时间:2015-03-05 22:26:19    阅读次数:386
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!