呼叫堆疊
别称有:执行栈(execution stack)、控制栈(control stack)、运行时栈(run-time stack)与机器栈(machine stack),是電腦科學中存儲有關正在執行的子程式的訊息的堆疊。英文有時直接简称“栈”(the stack),但堆疊中不一定僅存儲子程式訊息。幾乎所有電腦程式都依賴於呼叫堆疊,而高階語言一般將呼叫堆疊的細節隱藏至後台。 呼叫堆疊最經常被用於存放子程式的返回位址。在呼叫任何子程式時,主程…
共 38 篇文章
别称有:执行栈(execution stack)、控制栈(control stack)、运行时栈(run-time stack)与机器栈(machine stack),是電腦科學中存儲有關正在執行的子程式的訊息的堆疊。英文有時直接简称“栈”(the stack),但堆疊中不一定僅存儲子程式訊息。幾乎所有電腦程式都依賴於呼叫堆疊,而高階語言一般將呼叫堆疊的細節隱藏至後台。 呼叫堆疊最經常被用於存放子程式的返回位址。在呼叫任何子程式時,主程…
自动引用计数(,ARC)是Clang编译器的一项内存管理特性,为Objective-C和Swift语言提供自动引用计数。在编译时,它插入到目标代码中的 retain 和 release 消息,在运行时增加和减少引用计数,并在引用计数为零时标记这些对象进行释放。
記憶體保護()是作業系統對電腦上的記憶體进行存取權限管理的一個機制。記憶體保護的主要目的是防止某個进程去存取不是作業系統配置給它的定址空間。這個機制可以防止某個进程,因為某些程序错误或问题,而有意或无意地影響到其他进程或是作業系統本身的运行状态和数据。 實作方式 記憶體區段 記憶體區段(Segmentation)將電腦記憶體分割成許多小的區段。x86架構採用了典型的記憶體區段技術。 相關條目 ,違反記憶體保護的行為 *
C动态内存分配是在C语言中为了实现动态内存分配而进行的手动内存管理。这种管理是通过C標準函式庫中的malloc、realloc、calloc、free 等函数进行的。 C++ 为了兼容 C 语言也提供这些函数,但是更推荐使用 new、delete 操作符来完成类似的操作。 malloc 所实际使用的内存分配机制有很多不同的实现,执行时间和内存消耗各有不同。 函数概述 C 动态内存分配函数在头文件 stdlib.h 中声明(C++ 中对应…
在計算機科學中,垃圾回收(,縮寫為GC)是指一種自動的記憶體管理機制。当某个程序占用的一部分内存空间不再被这个程序访问时,这个程序会借助垃圾回收算法向操作系统归还这部分内存空间。垃圾回收器可以减轻程式員的負擔,也減少程序中的错误。垃圾回收最早起源于LISP语言。目前許多語言如Smalltalk、Java、C#、Go和D语言都支援垃圾回收器。 原理 垃圾回收器有兩個基本的原理: #考慮某個物件在未来的程式執行中,將不會被存取。 #回收這些…
記憶池(Memory Pool),又被稱為固定大小區塊規劃(fixed-size-blocks allocation),允許程式設計師以類似 C語言 的 malloc 或是 C++ 的 new 運算元進行動態的記憶體規劃。對於其它動態記憶體規劃的實踐來說,因為會變動記憶體區塊大小導致的碎片問題,導致在實時系統上受限於效能因此,根本無法使用。記憶池提供了一個更有效率的解決方案:預先規劃一定數量的記憶體區塊,使得整個程式可以在執行期規劃 (…
在计算机科学中, 动态内存分配(Dynamic memory allocation)又称为堆内存分配,是指计算机程序在运行期中分配使用主存储器。它可以当成是一种分配有限内存资源所有权的方法。 动态分配的内存在被程序员明确释放或被垃圾回收之前一直有效。与静态内存分配的区别在于没有一个固定的生存期。这样被分配的对象称之为有一个「动态生存期」。 细节 分配过程包括寻找一块足够大未被使用的内存。 分配过程当中的问题 内部和外部碎片。 减少碎片需…
在计算机领域,提交内存是Microsoft Windows操作系统内存管理中的一个概念,指的是系统已经为正在运行的进程承诺或预留的虚拟内存(電腦記憶體大小加上分頁文件)的总量。通过分页机制,內存空間裡面的內容可以在物理内存和页面文件之间移动,但這些內容大小不能超过两者之和。 参考文献
zswap是一项Linux内核的虚拟内存压缩功能,可为将要交换的页面提供压缩回写缓存。当内存页将要交换出去时,zswap不将其移动到交换设备,而是对其执行压缩,然后存储到系统RAM内动态分配的内存池中。回写到实际交换设备的动作则会延迟,甚至能完全避免,从而显著减少Linux系统用于交换的I/O;副作用则是压缩所需的额外CPU周期。 zswap能减少I/O,因而有利于使用固态存储的设备,包括嵌入式设备、上网本及其它相似的低端硬件设备,也包…
zram(也称为zRAM,先前称为compcache)是Linux核心的一项功能,可提供虚拟内存压缩。zram通过在RAM内的压缩块设备上分页,直到必须使用硬盘上的交换空间,以避免在磁盘上进行分页,从而提高性能。由于zram可以用内存替代硬盘为系统提供交换空间的功能,zram可以在需要交换/分页时让Linux更好利用RAM,在物理内存较少的旧电脑上尤其如此。 即使RAM的价格相对较低(),zram仍有利于嵌入式设备、上网本和其它相似的低…
分頁(),是一種作業系統裡記憶體管理的一種技術,可以使電腦的主記憶體可以使用儲存在輔助記憶體中的資料。作業系統會將輔助記憶體(通常是磁盘)中的資料分割成固定大小的區塊,稱為「頁」(pages)。當不需要時,將分頁由主記憶體(通常是内存)移到輔助記憶體;當需要時,再將資料取回,載入主記憶體中。相對於分段,分頁允許資料儲存於記憶體的不連續區塊。分页是磁盘和内存间传输数据块的最小单位。 分頁/虛擬記憶體能有助“大大地”降低整體及額外非必要的 …
計算機中的堆栈是電腦記憶體区域,其中以后进先出 (LIFO)方式添加或删除数据。 在大多数现代计算机系统中,每个线程都會被分配一定的内存区域,称为堆栈。当一个函数执行时,它可能会将一些数据添加到栈顶;当函数準備停止執行時,它负责从堆栈中删除该数据。线程的堆栈用于存储调用者提供的返回地址的位置,以便让返回语句返回到正确的位置。此外堆栈還會用于存储当前活动函数的固定长度变量。程序员也可以使用堆栈来存储可变长度的数据。 系统 许多类Unix系…
在计算机程序设计中,弱引用与“强引用”相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收。一些配有垃圾回收机制的语言,如Java、C#、Python、Perl、Lisp等都在不同程度上支持弱引用。 垃圾回收 垃圾回收用来清理不会再使用的对象,从而降低内存泄露和数据损坏的可能性。垃圾回收主要有两种类型:追踪和引用计数。引用计数会记录给定对象的…
記憶體分段(),一種電腦記憶體的管理技術,它將電腦的主記憶體分成許多區段(segment或sections)。當處理器要進行記憶體定址時,會使用一個數值,這個數值包括了某個區段,以及偏移量(offset)。一個程式的目的檔(Object file)中也會使用區段,讓它們可以鏈結成執行檔,並載入記憶體中執行。 相關條目 X86記憶體區段 虛擬記憶體
静态变量()在计算机编程领域指在程序执行前系统就为其進行記憶體分配(也即在运行时中不再改变分配情况)存储空间的一类变量。与之相对应的是在运行时只暂时存在的自动变量(即局部变量)与以动态分配方式获取存储空间的一些对象,其中自动变量的存储空间在调用栈上分配与释放。 概念与定义 “静态变量”这一术语有两个容易混淆的定义: #语言无关的通用定义:与程序有着相同的变量; #C族语言特有的定义:以static存储类声明的变量。 而在以Pascal为…
(MMU)的比较。]] 在计算机领域,输入输出内存管理单元(,缩写IOMMU)是一种内存管理单元(MMU),它将具有直接記憶體存取能力(可以DMA)的I/O总线连接至主内存。如传统的MMU(将CPU可见的虚拟地址转换为物理地址)一样,IOMMU将设备可见的虚拟地址(在此上下文中也称设备地址或I/O地址)映射到物理地址。部分单元还提供内存保护功能,防止故障或恶意的设备。 IOMMU的一个例子是Intel架构和AMD计算机上使用的AGP和P…
自由表()是一种用来实现特定动态内存分配方案的数据结构,也称自由列表。自由表的核心原理是将若干未分配的内存块用链表连接起来,将未分配区域的第一个字作为指向下一个未分配区域的指针使用。自由表非常适合用来实现内存池,因为内存池中对象的大小都是相同的。 用自由表实现内存的分配和回收非常简单:回收内存时只需将内存块链入自由表;分配时也只需从自由表的一端取下即可直接使用。如果内存块的大小不一,则分配前还需要在自由表中搜索足够大的内存块,可能有一定…
在计算机中,常驻集大小(,縮寫:RSS)是指进程占据的主存的一部分(以千字节计算)。其余被占用的部分存在于交换空间或者文件系统,这是因为要么这些内存部分被换出,要么作为可执行文件的一部分从未被加载。 参见 比例集大小(PSS) 唯一集大小(USS) 按需加载分页 虚拟内存 工作集 工作集大小 参考 外部链接 [https://lwn.net/Articles/97346/ Simple resident set size limits]…
在计算机体系结构中,共享显存是指显示卡没有自己的专用内存,而是与中央处理器和其他電腦零件共享随机存取存储器的內存容量。许多核心顯卡就是採用共享顯存这种设计,以降低主板的成本和复杂度,因此此時主板上不需要额外的内存芯片。 通常人們可以通过BIOS来設置共享顯存的容量。不過这样做的一个副作用是,当随机存取存储器的一些內存容量分配给显示卡时,這些被分配的內存就不能被顯示卡以外的電腦零件使用。例如一個內存容量為512字节的计算机,有64字節內存…
記憶體區段錯誤(,經常被縮寫為segfault),又譯為記憶體段错误,也稱存取權限衝突(access violation),是一種程式錯誤。 它會出現在當程式企圖存取CPU無法定址的記憶體區段時。當錯誤發生時,硬體會通知作業系統產生了記憶體存取權限衝突的狀況。作業系統通常會產生核心轉儲(core dump)以方便程式員進行除錯。通常該錯誤是由于調用一個地址,而該地址為空(NULL)所造成的,例如鏈表中調用一個未分配地址的空鏈錶單元的元素…