那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

應(yīng)用程序太大以至于內(nèi)存容納不下該程序是如何解決的詳細(xì)原理分析

FPGA之家 ? 來源:未知 ? 2019-07-28 09:56 ? 次閱讀

許多年以前,當(dāng)人們還在使用DOS或是更古老的操作系統(tǒng)的時(shí)候,計(jì)算機(jī)的內(nèi)存還非常小,一般都是以K為單位進(jìn)行計(jì)算,相應(yīng)的,當(dāng)時(shí)的程序規(guī)模也不大,所以內(nèi)存容量雖然小,但還是可以容納當(dāng)時(shí)的程序。

隨著圖形界面的興起還用用戶需求的不斷增大,應(yīng)用程序的規(guī)模也隨之膨脹起來,終于一個難題出現(xiàn)在程序員的面前:

應(yīng)用程序太大以至于內(nèi)存容納不下該程序

通常解決的辦法是把程序分割成許多稱為覆蓋塊(overlay)的片段。覆蓋塊0首先運(yùn)行,結(jié)束時(shí)他將調(diào)用另一個覆蓋塊。雖然覆蓋塊的交換是由OS完成的,但是必須先由程序員把程序先進(jìn)行分割,這是一個費(fèi)時(shí)費(fèi)力的工作,而且相當(dāng)枯燥。人們必須找到更好的辦法從根本上解決這個問題。

不久,人們終于找到了一個好辦法,這就是虛擬存儲器(virtual memory)。虛擬存儲器的基本思想是程序,數(shù)據(jù),堆棧的總的大小可以超過物理存儲器的大小,操作系統(tǒng)把當(dāng)前使用的部分保留在內(nèi)存中,而把其他未被使用的部分保存在磁盤上。

比如,一個16MB的程序和一個內(nèi)存只有4MB的機(jī)器,OS通過選擇,可以決定各個時(shí)刻將哪4M的內(nèi)容保留在內(nèi)存中,并在需要時(shí)在內(nèi)存和磁盤間交換程序片段,這樣就可以把這個16M的程序運(yùn)行在一個只具有4M內(nèi)存機(jī)器上了。而這個16M的程序在運(yùn)行前不必由程序員進(jìn)行分割。

任何時(shí)候,計(jì)算機(jī)上都存在一個程序能夠產(chǎn)生的地址集合,我們稱之為地址范圍。這個范圍的大小由CPU的位數(shù)決定,例如一個32位的CPU,它的地址范圍是0~0xFFFFFFFF (4G)而對于一個64位的CPU,它的地址范圍為0~0xFFFFFFFFFFFFFFFF (64T),這個范圍就是我們的程序能夠產(chǎn)生的地址范圍,我們把這個地址范圍稱為虛擬地址空間,該空間中的某一個地址我們稱之為虛擬地址。

與虛擬地址空間和虛擬地址相對應(yīng)的則是物理地址空間和物理地址,大多數(shù)時(shí)候我們的系統(tǒng)所具備的物理地址空間只是虛擬地址空間的一個子集,這里舉一個最簡單的例子直觀地說明這兩者,對于一臺內(nèi)存為256MB的32bit x86主機(jī)來說,它的虛擬地址空間范圍是0~0xFFFFFFFF(4G),而物理地址空間范圍是0x000000000~0x0FFFFFFF(256MB)。

在沒有使用虛擬存儲器的機(jī)器上,虛擬地址被直接送到內(nèi)存總線上,使具有相同地址的物理存儲器被讀寫。而在使用了虛擬存儲器的情況下,虛擬地址不是被直接送到內(nèi)存地址總線上,而是送到內(nèi)存管理單元——MMU(主角終于出現(xiàn)了)。他由一個或一組芯片組成,一般存在與協(xié)處理器中,其功能是把虛擬地址映射為物理地址。

MMU工作過程

大多數(shù)使用虛擬存儲器的系統(tǒng)都使用一種稱為分頁(paging)。虛擬地址空間劃分成稱為頁(page)的單位,而相應(yīng)的物理地址空間也被進(jìn)行劃分,單位是頁框(frame)。頁和頁框的大小必須相同。接下來配合圖片我以一個例子說明頁與頁框之間在MMU的調(diào)度下是如何進(jìn)行映射的:

在這個例子中我們有一臺可以生成16位地址的機(jī)器,它的虛擬地址范圍從0x0000~0xFFFF(64K),而這臺機(jī)器只有32K的物理地址,因此他可以運(yùn)行64K的程序,但該程序不能一次性調(diào)入內(nèi)存運(yùn)行。這臺機(jī)器必須有一個達(dá)到可以存放64K程序的外部存儲器(例如磁盤或是FLASH)以保證程序片段在需要時(shí)可以被調(diào)用。在這個例子中,頁的大小為4K,頁框大小與頁相同(這點(diǎn)是必須保證的,內(nèi)存和外圍存儲器之間的傳輸總是以頁為單位的),對應(yīng)64K的虛擬地址和32K的物理存儲器,他們分別包含了16個頁和8個頁框。

我們先根據(jù)上圖解釋一下分頁后要用到的幾個術(shù)語,在上面我們已經(jīng)接觸了頁和頁框,上圖中綠色部分是物理空間,其中每一格表示一個物理頁框。橘黃色部分是虛擬空間,每一格表示一個頁,它由兩部分組成,分別是Frame Index(頁框索引)和位p(present 存在位),F(xiàn)rame Index的意義很明顯,它指出本頁是往哪個物理頁框進(jìn)行映射的,位p的意義則是指出本頁的映射是否有效,如上圖,當(dāng)某個頁并沒有被映射時(shí)(或稱映射無效,F(xiàn)rame Index部分為X),該位為0,映射有效則該位為1。

我們執(zhí)行下面這些指令(本例子的指令不針對任何特定機(jī)型,都是偽指令)

例1:

MOVE REG,0 //將0號地址的值傳遞進(jìn)寄存器REG。

虛擬地址0將被送往MMU,MMU看到該虛地址落在頁0范圍內(nèi)(頁0范圍是0到4095),從上圖我們看到頁0所對應(yīng)(映射)的頁框?yàn)?(頁框2的地址范圍是8192到12287),因此MMU將該虛擬地址轉(zhuǎn)化為物理地址8192,并把地址8192送到地址總線上。內(nèi)存對MMU的映射一無所知,它只看到一個對地址8192的讀請求并執(zhí)行它。MMU從而把0到4096的虛擬地址映射到8192到12287的物理地址。

例2:

MOVE REG,8192

被轉(zhuǎn)換為MOVE REG,24576

因?yàn)樘摂M地址8192在頁2中,而頁2被映射到頁框6(物理地址從24576到28671)

例3:

MOVE REG,20500被轉(zhuǎn)換為MOVE REG,12308

虛擬地址20500在虛頁5(虛擬地址范圍是20480到24575)距開頭20個字節(jié)處,虛頁5映射到頁框3(頁框3的地址范圍是 12288到16383),于是被映射到物理地址12288+20=12308。

通過適當(dāng)?shù)脑O(shè)置MMU,可以把16個虛頁隱射到8個頁框中的任何一個,但是這個方法并沒有有效的解決虛擬地址空間比物理地址空間大的問題。從上圖中我們可以看到,我們只有8個頁框(物理地址),但我們有16個頁(虛擬地址),所以我們只能把16個頁中的8個進(jìn)行有效的映射。我們看看例4會發(fā)生什么情況

MOV REG,32780

虛擬地址32780落在頁8的范圍內(nèi),從上圖總我們看到頁8沒有被有效的進(jìn)行映射(該頁被打上X),這是又會發(fā)生什么?MMU注意到這個頁沒有被映射,于是通知CPU發(fā)生一個缺頁故障(page fault)。這種情況下操作系統(tǒng)必須處理這個頁故障,它必須從8個物理頁框中找到1個當(dāng)前很少被使用的頁框并把該頁框的內(nèi)容寫入外圍存儲器(這個動作被稱為page copy),隨后把需要引用的頁(例4中是頁8)映射到剛才釋放的頁框中(這個動作稱為修改映射關(guān)系),然后從新執(zhí)行產(chǎn)生故障的指令(MOV REG,32780)。

假設(shè)操作系統(tǒng)決定釋放頁框1,那么它將把虛頁8裝入物理地址的4-8K,并做兩處修改:首先把標(biāo)記虛頁1未被映射(原來虛頁1是被影射到頁框1的),以使以后任何對虛擬地址4K到8K的訪問都引起頁故障而使操作系統(tǒng)做出適當(dāng)?shù)膭幼鳎ㄟ@個動作正是我們現(xiàn)在在討論的),其次他把虛頁8對應(yīng)的頁框號由X變?yōu)?,因此重新執(zhí)行MOV REG,32780時(shí),MMU將把32780映射為4108。

我們大致了解了MMU在我們的機(jī)器中扮演了什么角色以及它基本的工作內(nèi)容是什么,下面我們將舉例子說明它究竟是如何工作的(注意,本例中的MMU并無針對某種特定的機(jī)型,它是所有MMU工作的一個抽象)。

首先明確一點(diǎn),MMU的主要工作只有一個,就是把虛擬地址映射到物理地址。

我們已經(jīng)知道,大多數(shù)使用虛擬存儲器的系統(tǒng)都使用一種稱為分頁(paging)的技術(shù),就象我們剛才所舉的例子,虛擬地址空間被分成大小相同的一組頁,每個頁有一個用來標(biāo)示它的頁號(這個頁號一般是它在該組中的索引,這點(diǎn)和C/C++中的數(shù)組相似)。

在上面的例子中0~4K的頁號為0,4~8K的頁號為1,8~12K的頁號為2,以此類推。而虛擬地址(注意:是一個確定的地址,不是一個空間)被MMU分為2個部分,第一部分是頁號索引(page Index),第二部分則是相對該頁首地址的偏移量(offset)。

我們還是以剛才那個16位機(jī)器結(jié)合下圖進(jìn)行一個實(shí)例說明,該實(shí)例中,虛擬地址8196被送進(jìn)MMU,MMU把它映射成物理地址。16位的CPU總共能產(chǎn)生的地址范圍是0~64K,按每頁4K的大小計(jì)算,該空間必須被分成16個頁。而我們的虛擬地址第一部分所能夠表達(dá)的范圍也必須等于16(這樣才能索引到該頁組中的每一個頁),也就是說這個部分至少需要4個bit。一個頁的大小是4K(4096),也就是說偏移部分必須使用12個bit來表示(2^12=4096,這樣才能訪問到一個頁中的所有地址),8192的二進(jìn)制碼如下圖所示:

該地址的頁號索引為0010(二進(jìn)制碼),既索引的頁為頁2,第二部分為000000000100(二進(jìn)制),偏移量為4。頁2中的頁框號為6(頁2映射在頁框6,見上圖),我們看到頁框6的物理地址是24~28K。于是MMU計(jì)算出虛擬地址8196應(yīng)該被映射成物理地址24580(頁框首地址+偏移量=24576+4=24580)。

同樣的,若我們對虛擬地址1026進(jìn)行讀取,1026的二進(jìn)制碼為0000010000000010,page index="0000"=0,offset=010000000010=1026。頁號為0,該頁映射的頁框號為2,頁框2的物理地址范圍是8192~12287,故MMU將虛擬地址1026映射為物理地址9218(頁框首地址+偏移量=8192+1026=9218)。以上就是MMU的工作過程。

S3C24XX的MMU工作過程

下面我們針對s3c2410的MMU(注1)進(jìn)行講解。

S3c2410總共有4種內(nèi)存映射方式,分別是:

1.Fault (無映射)2.Coarse Page (粗表)3.Section (段)4.Fine Page (細(xì)表)

我們以Section(段)進(jìn)行說明。

ARM920T是一個32bit的CPU,它的虛擬地址空間為2^32=4G。而在Section模式,這4G的虛擬空間被分成一個一個稱為段(Section)的單位(與我們上面講的頁在本質(zhì)上其實(shí)是一致的),每個段的長度是1M (而我們之前所使用的頁的長度是4K)。4G的虛擬內(nèi)存總共可以被分成4096個段(1M*4096=4G),因此我們必須用4096個描述符來對這組段進(jìn)行描述,每個描述符占用4個Byte,故這組描述符的大小為16KB (4byte*4096),這4096個描述符構(gòu)為一個表格,我們稱其為Tralaton Table。

上圖是描述符的結(jié)構(gòu)

Section base address:段基地址(相當(dāng)于頁框號首地址)

AP: 訪問控制位Access Permission

Domain: 訪問控制寄存器的索引。Domain與AP配合使用,對訪問權(quán)限進(jìn)行檢查

C:當(dāng)C被置1時(shí)為write-through (WT)模式

B: 當(dāng)B被置1時(shí)為write-back (WB)模式(C,B兩個位在同一時(shí)刻只能有一個被置1)

下面是s3c2410內(nèi)存映射后的一個示意圖:

我們的s3c2410上配置的SDRSAM大小為64M,該SDRAM的物理地址范圍是0x3000 0000~0x33FF FFFF(屬于Bank 6),由于1個Section的大小是1M,所以該物理空間可以被分成64個物理段(頁框)。

在Section模式下,送進(jìn)MMU的虛擬地址(注1)被分為兩部分(這點(diǎn)和我們上面舉的例子是一樣的),這兩部分為 Descriptor Index(相當(dāng)于上面例子的Page Index)和 Offset,descript index長度為12bit(2^12=4096,從這個關(guān)系式你能看出什么?:) ),Offset長度為20bit(2^20=1M,你又能看出什么?:))。觀察一下一個描述符(Descriptor)中的Section Base Address部分,它長度為12 bit,里面的值是該虛擬段(頁)映射成的物理段(頁框)的物理地址前12bit,由于每一個物理段的長度都是1M,所以物理段首地址的后20bit總是為0x00000(每個Section都是以1M對齊),確定一個物理地址的方法是 物理頁框基地址+虛擬地址中的偏移部分=Section Base Address<<20+Offset ,呵呵,可能你有點(diǎn)糊涂了,還是舉一個實(shí)際例子說明吧。

假設(shè)現(xiàn)在執(zhí)行指令MOV REG, 0x30000012,虛擬地址的二進(jìn)制碼為00110000 00000000 00000000 00010010,前12位是Descriptor Index= 00110000 0000=768,故在Translation Table里面找到第768號描述符,該描述的Section Base Address="0x0300",也就是說描述符所描述的虛擬段(頁)所映射的物理段(頁框)的首地址為0x3000 0000(物理段(頁框)的基地址=Section Base Address左移20bit=0x0300<<20=0x3000 0000),而Offset=000000 00000000 00010010=0x12,故虛擬地址0x30000012映射成的物理地址=0x3000 0000+0x12=0x3000 0012(物理頁框基地址+虛擬地址中的偏移)。你可能會問怎么這個虛擬地址和映射后的物理地址一樣?這是由我們定義的映射規(guī)則所決定的。在這個例子中我們定義的映射規(guī)則是把虛擬地址映射成和他相等的物理地址。我們這樣書寫映射關(guān)系的代碼:

void mem_mapping_linear(void)

{

unsigned long descriptor_index, section_base, sdram_base, sdram_size;

sdram_base=0x30000000;

sdram_size=0x 4000000;

for (section _base= sdram_base,descriptor_index = section _base>>20;

section _base < sdram_base+ sdram_size;?

descriptor_index+=1;section _base +=0x100000)

{

*(mmu_tlb_base + (descriptor_index)) = (section _base>>20) | MMU_OTHER_SECDESC;

}

}

上面的這段段代碼把虛擬空間0x3000 0000~0x33FF FFFF映射到物理空間0x3000 0000~0x33FF FFFF,由于虛擬空間與物理空間空間相吻合,所以虛擬地址與他們各自對應(yīng)的物理地址在值上是一致的。當(dāng)初始完Translation Table之后,記得要把Translation Table的首地址(第0號描述符的地址)加載進(jìn)協(xié)處理器CP15的Control Register2(2號控制寄存器)中,該控制寄存器的名稱叫做Translation table base (TTB) register。

以上討論的是descriptor中的Section Base Address以及虛擬地址和物理地址的映射關(guān)系,然而MMU還有一個重要的功能,那就是訪問控制機(jī)制(Access Permission )。簡單說訪問控制機(jī)制就是CPU通過某種方法判斷當(dāng)前程序?qū)?nèi)存的訪問是否合法(是否有權(quán)限對該內(nèi)存進(jìn)行訪問),如果當(dāng)前的程序并沒有權(quán)限對即將訪問的內(nèi)存區(qū)域進(jìn)行操作,則CPU將引發(fā)一個異常,s3c2410稱該異常為Permission fault,x86架構(gòu)則把這種異常稱之為通用保護(hù)異常(General Protection),什么情況會引起Permission fault呢?

比如處于User級別的程序要對一個System級別的內(nèi)存區(qū)域進(jìn)行寫操作,這種操作是越權(quán)的,應(yīng)該引起一個Permission fault,搞過x86架構(gòu)的朋友應(yīng)該聽過保護(hù)模式(Protection Mode),保護(hù)模式就是基于這種思想進(jìn)行工作的,于是我們也可以這么說:s3c2410的訪問控制機(jī)制其實(shí)就是一種保護(hù)機(jī)制。那s3c2410的訪問控制機(jī)制到底是由什么元素去參與完成的呢?它們間是怎么協(xié)調(diào)工作的呢?這些元素總共有:

1.協(xié)處理器CP15中Control Register3:DOMAIN ACCESS CONTROL REGISTER2.段描述符中的AP位和Domain位3.協(xié)處理器CP15中Control Register1(控制寄存器1)中的S bit和R bit4.協(xié)處理器CP15中Control Register5(控制寄存器5)5.協(xié)處理器CP15中Control Register6(控制寄存器6)

DOMAIN ACCESS CONTROL REGISTER 是訪問控制寄存器,該寄存器有效位為32,被分成16個區(qū)域,每個區(qū)域由兩個位組成,他們說明了當(dāng)前內(nèi)存的訪問權(quán)限檢查的級別,如下圖所示:

每區(qū)域可以填寫的值有4個,分別為00,01,10,11(二進(jìn)制),他們的意義如下所示:

00:當(dāng)前級別下,該內(nèi)存區(qū)域不允許被訪問,任何的訪問都會引起一個domain fault

01:當(dāng)前級別下,該內(nèi)存區(qū)域的訪問必須配合該內(nèi)存區(qū)域的段描述符中AP位進(jìn)行權(quán)檢查

10:保留狀態(tài)(我們最好不要填寫該值,以免引起不能確定的問題)

11:當(dāng)前級別下,對該內(nèi)存區(qū)域的訪問都不進(jìn)行權(quán)限檢查。

我們再來看看discriptor中的Domain區(qū)域,該區(qū)域總共有4個bit,里面的值是對DOMAIN ACCESS CONTROL REGISTER中16個區(qū)域的索引。而AP位配合S bit和A bit對當(dāng)前描述符描述的內(nèi)存區(qū)域被訪問權(quán)限的說明,他們的配合關(guān)系如下圖所示:

AP位也是有四個值,我結(jié)合實(shí)例對其進(jìn)行說明。

在下面的例子中,我們的DOMAIN ACCESS CONTROL REGISTER都被初始化成0xFFFF BDCF,如下圖所示:

例1:

Discriptor 中的domain=4,AP=10(這種情況下S bit ,A bit 被忽略)

假設(shè)現(xiàn)在我要對該描述符描述的內(nèi)存區(qū)域進(jìn)行訪問:

由于domain=4,而DOMAIN ACCESS CONTROL REGISTER中field 4的值是01,系統(tǒng)會對該訪問進(jìn)行訪問權(quán)限的檢查。

假設(shè)當(dāng)前CPU處于Supervisor模式下,則程序可以對該描述符描述的內(nèi)存區(qū)域進(jìn)行讀寫操作。

假設(shè)當(dāng)前CPU處于User模式下,則程序可以對該描述符描述的內(nèi)存進(jìn)行讀訪問,若對其進(jìn)行寫操作則引起一個permission fault。

例2:

Discriptor 中的domain=0,AP=10(這種情況下S bit ,A bit 被忽略)

domain=0,而DOMAIN ACCESS CONTROL REGISTER中field 0的值是11,系統(tǒng)對任何內(nèi)存區(qū)域的訪問都不進(jìn)行訪問權(quán)限的檢查。

由于統(tǒng)對任何內(nèi)存區(qū)域的訪問都不進(jìn)行訪問權(quán)限的檢查,所以無論CPU處于合種模式下(Supervisor模式或是User模式),程序?qū)υ撁枋龇枋龅膬?nèi)存都可以順利地進(jìn)行讀寫操作

例3:

Discriptor 中的domain=4,AP=11(這種情況下S bit ,A bit 被忽略)

由于domain=4,而DOMAIN ACCESS CONTROL REGISTER中field 4的值是01,系統(tǒng)會對該訪問進(jìn)行訪問權(quán)限的檢查。

由于AP=11,所以無論CPU處于合種模式下(Supervisor模式或是User模式),程序?qū)υ撁枋龇枋龅膬?nèi)存都可以順利地進(jìn)行讀寫操作

例4:

Discriptor 中的domain=4,AP=00, S bit="0",A bit="0"

由于domain=4,而DOMAIN ACCESS CONTROL REGISTER中field 4的值是01,系統(tǒng)會對該訪問進(jìn)行訪問權(quán)限的檢查。

由于AP=00,S bit="0",A bit="0",所以無論CPU處于合種模式下(Supervisor模式或是User模式),程序?qū)υ撁枋龇枋龅膬?nèi)存都只能進(jìn)行讀操作,否則引起permission fault。

通過以上4個例子我們得出兩個結(jié)論:1.對某個內(nèi)存區(qū)域的訪問是否需要進(jìn)行權(quán)限檢查是由該內(nèi)存區(qū)域的描述符中的Domain域決定的。

2.某個內(nèi)存區(qū)域的訪問權(quán)限是由該內(nèi)存區(qū)域的描述符中的AP位和協(xié)處理器CP15中Control Register1(控制寄存器1)中的S bit和R bit所決定的。能看到這里的同學(xué),一定會點(diǎn)個贊~\(≧▽≦)/~的吧~

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲器
    +關(guān)注

    關(guān)注

    38

    文章

    7528

    瀏覽量

    164348
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10905

    瀏覽量

    213030
  • DoS
    DoS
    +關(guān)注

    關(guān)注

    0

    文章

    128

    瀏覽量

    44643
  • MMU
    MMU
    +關(guān)注

    關(guān)注

    0

    文章

    91

    瀏覽量

    18370

原文標(biāo)題:一個16MB的程序是如何運(yùn)行在只有4MB內(nèi)存的機(jī)器上的?嵌入式ARM MMU原理解讀

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    請教高手:如何學(xué)習(xí)單片機(jī)

    我現(xiàn)在剛開始學(xué)單片機(jī),對程序很頭疼,經(jīng)常看書沒看幾頁,就看不下去了,以至于要用時(shí),一頭霧水,都不知道怎么辦,不知有沒有什么好方法可以學(xué)好它
    發(fā)表于 07-24 16:40

    程序太大了,放不下了出現(xiàn)如下錯誤應(yīng)該如何解決?

    本帖最后由 一只耳朵怪 于 2018-6-11 16:59 編輯 專家你好,我的程序太大了,放不下了,然后出現(xiàn)這樣的錯誤——can't allocateramfuncs, size
    發(fā)表于 06-11 09:08

    如何在uclinux中添加自己應(yīng)用程序詳細(xì)過程

    如何在uclinux中添加自己應(yīng)用程序詳細(xì)過程
    發(fā)表于 03-28 09:48 ?20次下載

    Java程序內(nèi)存低效使用問題的分析

    Java程序內(nèi)存的低效使用是導(dǎo)致其性能問題的主要因素。該文分析了泄漏對象、蚍蜉對象和空閑對象3類導(dǎo)致內(nèi)存低效使用的情況,探討解決上述問題的方法,并提出構(gòu)造對象行為模式
    發(fā)表于 04-09 09:39 ?12次下載

    以媒體為中心的應(yīng)用程序可能需要額外的內(nèi)存

    集成存儲器是單片機(jī)(MCU)的一個標(biāo)志,技術(shù)部門,以及許多應(yīng)用程序工作充分與主流MCU可用內(nèi)存。然而,以媒體為中心的應(yīng)用程序通常需要額外的代碼存儲器來處理復(fù)雜的音頻或圖形算法,或者額外的數(shù)據(jù)存儲器來存儲較大的音頻或圖形元素的數(shù)字
    發(fā)表于 07-04 14:34 ?2次下載
    以媒體為中心的<b class='flag-5'>應(yīng)用程序</b>可能需要額外的<b class='flag-5'>內(nèi)存</b>

    Android應(yīng)用程序內(nèi)存泄漏的原因及規(guī)避方法

    引言 Android應(yīng)用程序內(nèi)存使用的問題經(jīng)常容易被忽視,在傳統(tǒng)的編程語言中(例如C語言),回收內(nèi)存的任務(wù)是由程序本身來完成的,程序可以顯
    發(fā)表于 10-19 14:52 ?0次下載
    Android<b class='flag-5'>應(yīng)用程序</b><b class='flag-5'>內(nèi)存</b>泄漏的原因及規(guī)避方法

    DiskGenius專業(yè)版詳細(xì)應(yīng)用程序軟件免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是DiskGenius專業(yè)版詳細(xì)應(yīng)用程序軟件免費(fèi)下載
    發(fā)表于 09-18 08:00 ?0次下載
    DiskGenius專業(yè)版<b class='flag-5'>詳細(xì)</b><b class='flag-5'>應(yīng)用程序</b>軟件免費(fèi)下載

    如何使用抽樣方法對應(yīng)用程序進(jìn)行概要分析

    在本課程中,您將學(xué)習(xí)如何使用抽樣方法對應(yīng)用程序進(jìn)行概要分析并找出瓶頸,同時(shí)降低開銷。 作為額外的好處,英特爾System Studio分析工具還有助于動態(tài)查找內(nèi)存
    的頭像 發(fā)表于 11-01 06:31 ?2414次閱讀

    通用USB安裝程序應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是通用USB安裝程序應(yīng)用程序免費(fèi)下載,U盤寫入程序
    發(fā)表于 02-28 08:00 ?3次下載
    通用USB安裝<b class='flag-5'>程序</b>的<b class='flag-5'>應(yīng)用程序</b>免費(fèi)下載

    高級程序員都具備哪些優(yōu)良素質(zhì)

    作為高級程序員,以至于系統(tǒng)分析員,也就是對于一個程序項(xiàng)目的設(shè)計(jì)者而言,除了應(yīng)該具備上述全部素質(zhì)之外,還需要具備以下素質(zhì):
    的頭像 發(fā)表于 03-28 14:07 ?1579次閱讀

    51單片機(jī)無法燒錄程序應(yīng)該如何解詳細(xì)方法說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)無法燒錄程序應(yīng)該如何解詳細(xì)方法說明。
    發(fā)表于 08-28 17:29 ?3次下載
    51單片機(jī)無法燒錄<b class='flag-5'>程序</b>應(yīng)該如<b class='flag-5'>何解</b>決<b class='flag-5'>詳細(xì)</b>方法說明

    windows應(yīng)用程序讀取進(jìn)程的內(nèi)存工具免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是windows應(yīng)用程序讀取進(jìn)程的內(nèi)存工具免費(fèi)下載。
    發(fā)表于 05-27 08:00 ?1次下載

    內(nèi)存泄漏的檢測方法

    內(nèi)存泄露(Memory leak)指的是,在程序中動態(tài)申請的內(nèi)存,在使用完后既沒有釋放,又無法被程序的其他部分訪問。內(nèi)存泄露是在開發(fā)大型
    的頭像 發(fā)表于 06-20 11:01 ?3192次閱讀

    亞馬遜已更新了Alexa應(yīng)用程序

    根據(jù)AndroidPolice的說法,亞馬遜已更新了Alexa應(yīng)用程序。對主屏幕進(jìn)行了更改,用戶可以在其中快速訪問應(yīng)用程序的常用功能。最重要的是,更新后,
    的頭像 發(fā)表于 07-28 10:52 ?2393次閱讀

    LabVIEW應(yīng)用程序中性能瓶頸的解決

    了解如何識別和解決LabVIEW應(yīng)用程序中的性能瓶頸。使用內(nèi)置工具和VI分析器,您可以監(jiān)視VIs的內(nèi)存使用情況和執(zhí)行時(shí)間,以確定導(dǎo)致應(yīng)用程序性能下降的代碼部分。
    發(fā)表于 03-29 14:03 ?8次下載
    LabVIEW<b class='flag-5'>應(yīng)用程序</b>中性能瓶頸的解決
    金濠国际娱乐城| 百家乐十赌九诈| 澳门永利娱乐| 澳门百家乐| 澳门百家乐官网破解方法| 太阳城| 免费百家乐规则| 澳门顶级赌场手机在线登陆| 百家乐官网游戏制作| 大发888刮刮乐下载| 百家乐官网博弈之赢者理论坛| 大发888娱乐场and| 百家乐官网7人桌布| 石台县| 伟易博百家乐娱乐城 | 大发888 bet娱乐场下载| 百家乐庄河闲的赌法| 百家乐官网EA平台| 抚顺棋牌网| 视频百家乐破解| 太阳城百家乐官网作弊| 百家乐强弱走势图| 如何玩百家乐官网赚钱| 皇冠国际现金投注网| 网上百家乐内| 精通百家乐官网的玩法技巧和规则 | 大嘴棋牌手机版| 百家乐保单破解方法| 哪个百家乐官网投注好| 娱乐城官方网站| 吉利百家乐的玩法技巧和规则| 金木棉百家乐官网的玩法技巧和规则 | 大发888快速提现| 百家乐龙虎台布价格| 广州百家乐官网赌博机| 新葡京娱乐城官方网址| 欧洲百家乐的玩法技巧和规则| 沙龙百家乐破解| 百家乐官网必胜法hk| 大发888官方 df888| 百家乐赌场高手|