青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 319, comments - 22, trackbacks - 0, articles - 11
  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

     摘要: 詳解QT 信號機制 (上篇)2011-07-05 18:32 佚名 互聯網 我要評論(1) 字號:T | T信號不是Unix中進程間通信的信號。這里的信號更多地與圖形界面的輸入輸出聯系在一起(當然也可以是不可見的操作)。先來看內容。AD:QT 信號機制 是本文要介紹的內容,Qt用預編譯器和宏來保證強大的跨平臺能力,信號機制則是其中最精妙之處。本文分...  閱讀全文

posted @ 2011-07-14 07:14 RTY 閱讀(908) | 評論 (0)編輯 收藏

作者: Peter Wang (Intel) (28 篇文章) 日期: 九月 17, 2010 在 2:14 下午

最近Intel新發布的產品Intel® Parallel Studio 2011包含四個組件:Intel® Parallel Composer 2011, Intel® Parallel Inspector 2011,Intel® Parallel Amplifier 和Intel® Parallel Advisor。

我們知道Intel® Parallel Inspector 2011 可以對程序進行動態檢查,包含內存檢查和線程檢查。

現在Intel® Parallel Studio 2011不用執行程序,也可以發現原代碼的錯誤。這個功能(Static Security Analysis - SSA) 給我們帶來的好處是:

  1. 只檢查原代碼,不檢查程序。在最終程序生成前,發現問題。節約了大量的調試時間
  2. 檢查所有的代碼,不管路徑有沒有被執行到
  3. 還檢查“死代碼”
  4. 只專注于內存訪問,不檢查線程訪問
  5. 無需Test Case (User Input)

SSA功能由二部分來實現:

  1. Intel® Parallel Composer 2011 實現靜態掃描,生成結果
  2. Intel® Parallel Inspector 2011 打開結果文件,進行分析

Intel® Parallel Composer 2011 上的關鍵步驟:

1. 選擇Intel C++編譯器

2. 改變編譯器的選項

3. 重新Rebuild, 生成結果

Intel® Parallel Inspector 2011上的關鍵步驟:

1. 打開結果文件,檢查某個錯誤

2. 對照原代碼,發現問題

3. 利用“幫助”,解釋問題

分類: Blog Challenge, 并行計算, 英特爾® 軟件網絡 2.0
標簽:
如需了解英特爾軟件產品相關的性能和優化選項,請參閱優化注意事項.

posted @ 2011-07-13 21:39 RTY 閱讀(542) | 評論 (0)編輯 收藏

 如題,鏈接如下:

http://developer.qt.nokia.com/elearning

 

posted @ 2011-07-13 07:18 RTY 閱讀(324) | 評論 (0)編輯 收藏

     摘要: QML是什么?QML 是一中聲明式語言,用來描述應用程序接口的――是什么樣,有怎樣的行為。在QML中,一個用戶接口被指定為帶有屬性的對象是。這個介紹主要面向只有很少或者沒有編碼經驗的人。在QML中,JavaScript作為一種腳本語言被使用。因此在深入學習QML之前,也許你會想要去學一些關于JavaScript的知識(JavaScript: The Definitive G...  閱讀全文

posted @ 2011-07-06 22:03 RTY 閱讀(1478) | 評論 (0)編輯 收藏

styleSheet : QString

This property holds the widget's style sheet.

The style sheet contains a textual description of customizations to the widget's style, as described in the Qt Style Sheets document.

Since Qt 4.5, Qt style sheets fully supports Mac OS X.

Warning: Qt style sheets are currently not supported for custom QStyle subclasses. We plan to address this in some future release.

This property was introduced in Qt 4.2.

Access functions:

QStringstyleSheet () const
voidsetStyleSheet ( const QString & styleSheet )


一定要注意速度,平凡的調用,一般會消耗0.25倍的CPU資源

posted @ 2011-07-04 20:47 RTY 閱讀(3216) | 評論 (0)編輯 收藏

  1 #!/usr/bin/env python
  2 # -*- coding: utf-8 -*-
  3 
  4 
  5 # Fast copy for Winodws or Linux
  6 # Copy file to
  7 
  8 import os
  9 import sys
 10 import re
 11 from optparse import OptionParser
 12 
 13 
 14 def CallFastCmd(src, dest):
 15      cmd = "XCOPY " + src +" " + dest
 16      print u"命令行"+ cmd
 17      os.system(cmd)
 18 
 19 def SplitStr(src, split):
 20      return src.split(split)
 21 
 22 
 23 
 24 def IsCanCopy(path, include, exclude):
 25     IsCan = False
 26     split = "|"
 27     if include is None:
 28         if exclude is None:
 29             IsCan = True
 30         else:
 31             for excStr in SplitStr(exclude, split):
 32                if (excStr not in path):
 33                    IsCan = True
 34     else:
 35         for incStr in SplitStr(include, split):
 36 
 37              if exclude is not None :
 38                  for excStr in SplitStr(exclude, split):
 39                      if (excStr not in path) and (incStr in path):
 40                          IsCan = True
 41              elif incStr in path:
 42                  IsCan = True
 43 
 44 
 45 
 46     #返回值
 47     return IsCan
 48 
 49 
 50 
 51 def CopyToSubDir(src, des, include, exclude, regEnable):
 52     for root,dirs,files in os.walk(des):
 53         for dirPath in dirs:
 54             subPath = os.path.join(root,dirPath) # 路徑
 55             if not regEnable:
 56                if IsCanCopy(subPath, include, exclude):
 57                    CallFastCmd(src, subPath)
 58             else#使用正則表達式
 59                 incReg = include
 60                 excReg = exclude
 61 
 62                 incMatch = incReg.match(incReg, subPath)
 63                 if incMatch is not None:
 64                     excMatch = excReg.match(excReg, subPath)
 65                     if excMatch is None:
 66                         CallFastCmd(src, subPath)
 67 
 68 
 69 
 70 
 71 
 72 def Copy(src, des, include, exclude , regEnable):
 73     if not os.path.exists(des):
 74         CallFastCmd(src, des)
 75     else:
 76         CopyToSubDir(src, des, include, exclude, regEnable)
 77 
 78 
 79 
 80 def ParseCmd():
 81     parser = OptionParser()
 82     parser.add_option("-s""--src", action="store", dest="src", help="input the Dir or file")
 83     parser.add_option("-d""--des", action="store", dest="des", help="input the Dir or file")
 84     parser.add_option("-i""--include",action="store", dest="include", help="input the include string")
 85     parser.add_option("-e""--exclude",action="store", dest="exclude", help="input the exclude string")
 86     parser.add_option("-r""--regEnable",action="store_true", dest="regEnable", default=False, help="input the exclude string")
 87 
 88 
 89     (options, args) = parser.parse_args()
 90     if options.src is None:
 91         parser.error("The source is none")
 92     if options.des is None:
 93         parser.error("The dest is none")
 94 
 95     Copy(options.src, options.des, options.include, options.exclude, options.regEnable)
 96 
 97 if __name__ == "__main__":
 98     ParseCmd()
 99 
100 

posted @ 2011-06-21 00:47 RTY 閱讀(494) | 評論 (0)編輯 收藏

Advanced PDF Password Recovery(PDF 文件解密的方案) V5.00 漢化綠色特別版


Advanced PDF Password Recovery(PDF 文件解密的方案) V5.00 漢化綠色特別版
Advanced PDF Password Recovery可以破解Adobe Acrobat PDF文件的“所有者密碼”。未破解“所有者密碼”的PDF文件是不能被編輯和打印的。該程序也可以破解用FileOpen插件加密的文件。破解可以立即 完成。破解后的文件可以用各種PDF瀏覽器(例如Adobe Acrobat Reader)閱讀而無任何限制。
支持命令行格式
支持PDF文件限制直接解除
支持PDF文件密碼的暴力破解
支持幾種解密方式
支持PDF最新的版本

sn:APDFPR-P-R844-JCEN-BMSK



posted @ 2011-06-19 21:05 RTY 閱讀(2042) | 評論 (0)編輯 收藏

一、針對Microsoft
#include   <stdlib.h>


(1)第一種方式
system( "PAUSE ");
--------------------
(2)第二種方式
getchar();
---------------------
(3)第三種方式
Sleep();



二、針對Linux
(1)第一種方式
getchar();

posted @ 2011-06-18 22:04 RTY 閱讀(5452) | 評論 (0)編輯 收藏

概述

  size_t 類型定義在cstddef頭文件中,該文件是C標準庫的頭文件stddef.h的C++版。它是一個與機器相關的unsigned類型,其大小足以保證存儲內存中對象的大小。   例如bitset的size操作返回bitset對象中二進制位中的個數,返回值類型是size_t。   例如在用下標訪問元素時,vector使用vector::size_type作為下標類型,而數組下標的正確類型則是size_t。

來源

  size_t是標準C庫中定義的,應為unsigned int。   數據類型"socklen_t"和int應該具有相同的長度。否則就會破壞 BSD套接字層的填充.POSIX開始的時候用的是size_t, Linus Torvalds(他希望有更多的人,但顯然不是很多) 努力向他們解釋使用size_t是完全錯誤的,因為在64位結構中 size_t和int的長度是不一樣的,而這個參數(也就是accept函數的第三參數)的長度必 須和int一致,因為這是BSD套接字接口標準.最終POSIX的那幫家伙找到了解決的辦法,那就是創造了一個新的類 型"socklen_t".Linux Torvalds說這是由于他們發現了自己的錯誤但又不好意思向大家伙兒承認,所以另外創造了一個新的數據類型 。   在C++中,設計 size_t 就是為了適應多個平臺的 。size_t的引入增強了程序在不同平臺上的可移植性。size_t是針對系統定制的一種數據類型,一般是整形,因為C/C++標準只定義一最低的位 數, 而不是必需的固定位數。而且在內存里,對數的高位對齊存儲還是低位對齊存儲各系統都不一樣。為了提高代碼的可移植性,就有必要定議這樣的數據類型。一般這 種類型都會定義到它具體占幾位內存等。當然,有些是編譯器或系統已經給定義好的。經測試發現,在32位系統中size_t是4字節的,而在64位系統 中,size_t是8字節的,這樣利用該類型可以增強程序的可移植性。

posted @ 2011-06-18 21:53 RTY 閱讀(412) | 評論 (0)編輯 收藏

malloc

原型:extern void *malloc(unsigned int num_bytes);
用法:#include <malloc.h>
或#include<stdlib.h>
功能:分配長度為num_bytes字節的內存塊
說明:如果分配成功則返回指向被分配內存的指針,否則返回空指針NULL。
當內存不再使用時,應使用free()函數將內存塊釋放。
malloc的語法是:指針名=(數據類型*)malloc(長度),(數據類型*)表示指針.
舉例

// malloc.c
#include <syslib.h>
#include <malloc.h>
main()
{
char *p;
clrscr(); // clear screen
p=(char *)malloc(100);
if(p)
printf("Memory Allocated at: %x",p);
else
printf("Not Enough Memory!\n");

if(p)
free(p);
getchar();
return 0;
}

malloc()函數的工作機制

malloc函數的實質體現在,它有一個將可用的內存塊連接為一個長長的列表的所謂空閑鏈表。調用malloc函數時,它沿連接表尋找一個大到足以滿足 用戶請求所需要的內存塊。然后,將該內存塊一分為二(一塊的大小與用戶請求的大小相等,另一塊的大小就是剩下的字節)。接下來,將分配給用戶的那塊內存傳 給用戶,并將剩下的那塊(如果有的話)返回到連接表上。調用free函數時,它將用戶釋放的內存塊連接到空閑鏈上。到最后,空閑鏈會被切成很多的小內存片 段,如果這時用戶申請一個大的內存片段,那么空閑鏈上可能沒有可以滿足用戶要求的片段了。于是,malloc函數請求延時,并開始在空閑鏈上翻箱倒柜地檢 查各內存片段,對它們進行整理,將相鄰的小空閑塊合并成較大的內存塊。

淺析malloc()的幾種實現方式

malloc()是C語言中動態存儲管理的一組標準庫函數之一。其作用是在內存的動態存儲區中分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。
動態內存分配就是指在程序執行的過程中動態地分配或者回收存儲空間的分配內存的方法。動態內存 分配不像數組等靜態內存分配方法那樣需要預先分配存儲空間,而是由系統根據程序的需要即時分配,且分配的大小就是程序要求的大小。本文簡單介紹動態內存分 配函數malloc()及幾種實現方法。
1. 簡介
malloc()是C語言中動態存儲管理的一組標準庫函數之一。其作用是在內存的動態存儲區中 分配一個長度為size的連續空間。其參數是一個無符號整形數,返回值是一個指向所分配的連續存儲域的起始地址的指針。還有一點必須注意的是,當函數未能 成功分配存儲空間(如內存不足)就會返回一個NULL指針。所以在調用該函數時應該檢測返回值是否為NULL并執行相應的操作。
2. 函數說明
C語言的動態存儲管理由一組標準庫函數實現,其原型在標準文 件<stdlib.h>里描述,需要用這些功能時應包含這個文件。與動態存儲分配有關的函數共有四個,其中就包括存儲分配函數 malloc()。函數原型是:void *malloc (size_t n);這里的size_t是標準庫里定義的一個類型,它是一個無符號整型。這個整型能夠滿足所有對存儲塊大小描述的需要,具體相當于哪個整型由具體的C系 統確定。malloc的返回值為(void *)類型(這是通用指針的一個重要用途),它分配一片能存放大小為n的數據的存儲塊,返回對應的指針值;如果不能滿足申請(找不到能滿足要求的存儲塊)就 返回NULL。在使用時,應該把malloc的返回值轉換到特定指針類型,賦給一個指針。
注意,雖然這里的存儲塊是通過動態分配得到的,但是它的大小也是確定的,同樣不允許越界使用。 例如上面程序段分配的塊里能存n個雙精度數據,隨后的使用就必須在這個范圍內進行。越界使用動態分配的存儲塊,尤其是越界賦值,可能引起非常嚴重的后果, 通常會破壞程序的運行系統,可能造成本程序或者整個計算機系統垮臺。
下例是一個動態分配的例子:
#include <stdio.h>
#include<stdlib.h>
main()
{
int count,*array; /*count是一個計數器,array是一個整型指針,也可以理解為指向一個整型數組的首地址*/
count=100;
if((array=(int *)malloc(count*sizeof(int))) == NULL)
{
printf("不能成功分配存儲空間。");
exit(1);
}
for(count=0;count<10;count++) /*給數組賦值*/
array[count]=count;
for(count=0;count<10;count++) /*打印數組元素*/
printf("%2d",array[count]);
}
上例中動態分配了10個整型存儲區域,然后進行賦值并打印。例中if((array(int *) malloc (10*sizeof(int)))==NULL)語句可以分為以下幾步:
1)分配10個整型的連續存儲空間,并返回一個指向其起始地址的整型指針
2)把此整型指針地址賦給array
3)檢測返回值是否為NULL
3. malloc()工作機制
malloc函數的實質體現在,它有一個將可用的內存塊連接為一個長長的列表的所謂空閑鏈表。 調用malloc函數時,它沿連接表尋找一個大到足以滿足用戶請求所需要的內存塊。然后,將該內存塊一分為二(一塊的大小與用戶請求的大小相等,另一塊的 大小就是剩下的字節)。接下來,將分配給用戶的那塊內存傳給用戶,并將剩下的那塊(如果有的話)返回到連接表上。調用free函數時,它將用戶釋放的內存 塊連接到空閑鏈上。到最后,空閑鏈會被切成很多的小內存片段,如果這時用戶申請一個大的內存片段,那么空閑鏈上可能沒有可以滿足用戶要求的片段了。于 是,malloc函數請求延時,并開始在空閑鏈上翻箱倒柜地檢查各內存片段,對它們進行整理,將相鄰的小空閑塊合并成較大的內存塊。
4. malloc()在操作系統中的實現


    申請的時候實際上占用的內存要比申請的大。因為超出的空間是用來記錄對這塊內存的管理信息。先看一下在《UNIX環境高級編程》中第七章的一段話:

   大多數實現所分配的存儲空間比所要求的要稍大一些,額外的空間用來記錄管理信息——分配塊的長度,指向下一個分配塊的指針等等。這就意味著如果寫過一個已 分配區的尾端,則會改寫后一塊的管理信息。這種類型的錯誤是災難性的,但是因為這種錯誤不會很快就暴露出來,所以也就很難發現。將指向分配塊的指針向后移 動也可能會改寫本塊的管理信息。

   以上這段話已經給了我們一些信息了。malloc()申請的空間實際我覺得就是分了兩個不同性質的空間。一個就是用來記錄管理信息的空間,另外一個就是可用空間了。而用來記錄管理信息的實際上是一個結構體。

struct mem_control_block {
int is_available;
int size;
};


在 C 程序中,多次使用malloc () 和 free()。不過,您可能沒有用一些時間去思考它們在您的操作系統中是如何實現的。本節將向您展示 malloc 和 free 的一個最簡化實現的代碼,來幫助說明管理內存時都涉及到了哪些事情。
在大部分操作系統中,內存分配由以下兩個簡單的函數來處理:
void *malloc (long numbytes):該函數負責分配 numbytes 大小的內存,并返回指向第一個字節的指針。
void free(void *firstbyte):如果給定一個由先前的 malloc 返回的指針,那么該函數會將分配的空間歸還給進程的“空閑空間”。
malloc_init 將是初始化內存分配程序的函數。它要完成以下三件事:將分配程序標識為已經初始化,找到系統中最后一個有效內存地址,然后建立起指向我們管理的內存的指針。這三個變量都是全局變量:
清單 1. 我們的簡單分配程序的全局變量
int has_initialized = 0;
void *managed_memory_start;
void *last_valid_address;
如前所述,被映射的內存的邊界(最后一個有效地址)常被稱為系統中斷點或者 當前中斷點。在很多 UNIX? 系統中,為了指出當前系統中斷點,必須使用 sbrk(0) 函數。 sbrk 根據參數中給出的字節數移動當前系統中斷點,然后返回新的系統中斷點。使用參數 0 只是返回當前中斷點。這里是我們的 malloc 初始化代碼,它將找到當前中斷點并初始化我們的變量:
清單 2. 分配程序初始化函數
/* Include the sbrk function */
#include
void malloc_init()
{
/* grab the last valid address from the OS */
last_valid_address = sbrk(0);
/* we don't have any memory to manage yet, so
*just set the beginning to be last_valid_address
*/
managed_memory_start = last_valid_address;
/* Okay, we're initialized and ready to go */
has_initialized = 1;
}
現在,為了完全地管理內存,我們需要能夠追蹤要分配和回收哪些內存。在對內存塊進行了 free 調用之后,我們需要做的是諸如將它們標記為未被使用的等事情,并且,在調用 malloc 時,我們要能夠定位未被使用的內存塊。因此, malloc 返回的每塊內存的起始處首先要有這個結構:
清單 3. 內存控制塊結構定義
struct mem_control_block {
int is_available;
int size;
};
現在,您可能會認為當程序調用 malloc 時這會引發問題 —— 它們如何知道這個結構?答案是它們不必知道;在返回指針之前,我們會將其移動到這個結構之后,把它隱藏起來。這使得返回的指針指向沒有用于任何其他用途的 內存。那樣,從調用程序的角度來看,它們所得到的全部是空閑的、開放的內存。然后,當通過 free() 將該指針傳遞回來時,我們只需要倒退幾個內存字節就可以再次找到這個結構。
在討論分配內存之前,我們將先討論釋放,因為它更簡單。為了釋放內存,我們必須要做的惟一一件事情就是,獲得我們給出的指針,回退 sizeof(struct mem_control_block) 個字節,并將其標記為可用的。這里是對應的代碼:
清單 4. 解除分配函數
void free(void *firstbyte) {
struct mem_control_block *mcb;
/* Backup from the given pointer to find the
* mem_control_block
*/
mcb = firstbyte - sizeof(struct mem_control_block);
/* Mark the block as being available */
mcb->is_available = 1;
/* That's It! We're done. */
return;
}
如您所見,在這個分配程序中,內存的釋放使用了一個非常簡單的機制,在固定時間內完成內存釋放。分配內存稍微困難一些。以下是該算法的略述:
清單 5. 主分配程序的偽代碼
1. If our allocator has not been initialized, initialize it.
2. Add sizeof(struct mem_control_block) to the size requested.
3. start at managed_memory_start.
4. Are we at last_valid address?
5. If we are:
A. We didn't find any existing space that was large enough
-- ask the operating system for more and return that.
6. Otherwise:
A. Is the current space available (check is_available from
the mem_control_block)?
B. If it is:
i) Is it large enough (check "size" from the
mem_control_block)?
ii) If so:
a. Mark it as unavailable
b. Move past mem_control_block and return the
pointer
iii) Otherwise:
a. Move forward "size" bytes
b. Go back go step 4
C. Otherwise:
i) Move forward "size" bytes
ii) Go back to step 4
我們主要使用連接的指針遍歷內存來尋找開放的內存塊。這里是代碼:
清單 6. 主分配程序
void *malloc(long numbytes) {
/* Holds where we are looking in memory */
void *current_location;
/* This is the same as current_location, but cast to a
* memory_control_block
*/
struct mem_control_block *current_location_mcb;
/* This is the memory location we will return. It will
* be set to 0 until we find something suitable
*/
void *memory_location;
/* Initialize if we haven't already done so */
if(! has_initialized) {
malloc_init();
}
/* The memory we search for has to include the memory
* control block, but the users of malloc don't need
* to know this, so we'll just add it in for them.
*/
numbytes = numbytes + sizeof(struct mem_control_block);
/* Set memory_location to 0 until we find a suitable
* location
*/
memory_location = 0;
/* Begin searching at the start of managed memory */
current_location = managed_memory_start;
/* Keep going until we have searched all allocated space */
while(current_location != last_valid_address)
{
/* current_location and current_location_mcb point
* to the same address. However, current_location_mcb
* is of the correct type, so we can use it as a struct.
* current_location is a void pointer so we can use it
* to calculate addresses.
*/
current_location_mcb =
(struct mem_control_block *)current_location;
if(current_location_mcb->is_available)
{
if(current_location_mcb->size >= numbytes)
{
/* Woohoo! We've found an open,
* appropriately-size location.
*/
/* It is no longer available */
current_location_mcb->is_available = 0;
/* We own it */
memory_location = current_location;
/* Leave the loop */
break;
}
}
/* If we made it here, it's because the Current memory
* block not suitable; move to the next one
*/
current_location = current_location +
current_location_mcb->size;
}
/* If we still don't have a valid location, we'll
* have to ask the operating system for more memory
*/
if(! memory_location)
{
/* Move the program break numbytes further */
sbrk(numbytes);
/* The new memory will be where the last valid
* address left off
*/
memory_location = last_valid_address;
/* We'll move the last valid address forward
* numbytes
*/
last_valid_address = last_valid_address + numbytes;
/* We need to initialize the mem_control_block */
current_location_mcb = memory_location;
current_location_mcb->is_available = 0;
current_location_mcb->size = numbytes;
}
/* Now, no matter what (well, except for error conditions),
* memory_location has the address of the memory, including
* the mem_control_block
*/
/* Move the pointer past the mem_control_block */
memory_location = memory_location + sizeof(struct mem_control_block);
/* Return the pointer */
return memory_location;
}
這就是我們的內存管理器。現在,我們只需要構建它,并在程序中使用它即可。
5. malloc()的其他實現
malloc() 的實現有很多,這些實現各有優點與缺點。在設計一個分配程序時,要面臨許多需要折衷的選擇,其中包括:
分配的速度。
回收的速度。
有線程的環境的行為。
內存將要被用光時的行為。
局部緩存。
簿記(Bookkeeping)內存開銷。
虛擬內存環境中的行為。
小的或者大的對象。
實時保證。
每一個實現都有其自身的優缺點集合。在我們的簡單的分配程序中,分配非常慢,而回收非常快。另外,由于它在使用虛擬內存系統方面較差,所以它最適于處理大的對象。
還有其他許多分配程序可以使用。其中包括:
Doug Lea Malloc:Doug Lea Malloc 實際上是完整的一組分配程序,其中包括 Doug Lea 的原始分配程序,GNU libc 分配程序和 ptmalloc。 Doug Lea 的分配程序有著與我們的版本非常類似的基本結構,但是它加入了索引,這使得搜索速度更快,并且可以將多個沒有被使用的塊組合為一個大的塊。它還支持緩存, 以便更快地再次使用最近釋放的內存。 ptmalloc 是 Doug Lea Malloc 的一個擴展版本,支持多線程。在本文后面的 參考資料部分中,有一篇描述 Doug Lea 的 Malloc 實現的文章。
BSD Malloc:BSD Malloc 是隨 4.2 BSD 發行的實現,包含在 FreeBSD 之中,這個分配程序可以從預先確實大小的對象構成的池中分配對象。它有一些用于對象大小的 size 類,這些對象的大小為 2 的若干次冪減去某一常數。所以,如果您請求給定大小的一個對象,它就簡單地分配一個與之匹配的 size 類。這樣就提供了一個快速的實現,但是可能會浪費內存。在 參考資料部分中,有一篇描述該實現的文章。
Hoard:編寫 Hoard 的目標是使內存分配在多線程環境中進行得非常快。因此,它的構造以鎖的使用為中心,從而使所有進程不必等待分配內存。它可以顯著地加快那些進行很多分配和回收的多線程進程的速度。在 參考資料部分中,有一篇描述該實現的文章。
眾多可用的分配程序中最有名的就是上述這些分配程序。如果您的程序有特別的分配需求,那么您可能更愿意編寫一個定制的能匹配您的程序內存分配方式的分配程序。不過,如果不熟悉分配程序的設計,那么定制分配程序通常會帶來比它們解決的問題更多的問題。
6. 結束語
前面已經提過,多次調用malloc()后空閑內存被切成很多的小內存片段,這就使得用戶在申 請內存使用時,由于找不到足夠大的內存空間,malloc()需要進行內存整理,使得函數的性能越來越低。聰明的程序員通過總是分配大小為2的冪的內存 塊,而最大限度地降低潛在的malloc性能喪失。也就是說,所分配的內存塊大小為4字節、8字節、16字節、18446744073709551616 字節,等等。這樣做最大限度地減少了進入空閑鏈的怪異片段(各種尺寸的小片段都有)的數量。盡管看起來這好像浪費了空間,但也容易看出浪費的空間永遠不會 超過50%。
參考文獻:
[1] Jonathan Bartlett,內存管理內幕. developerWorks 中國,2004年11月
[2] Jan Lindblad,內存碎片處理技術. EDN電子設計技術,2004年10月08日

轉自:http://baike.baidu.com/view/736228.htm

posted @ 2011-06-18 20:20 RTY 閱讀(910) | 評論 (0)編輯 收藏

僅列出標題
共31頁: First 13 14 15 16 17 18 19 20 21 Last 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线视频欧美精品| 最新亚洲激情| 韩国欧美一区| 久久视频在线视频| 久久久久九九九| 亚洲国产日韩一区二区| 亚洲国产天堂网精品网站| 欧美在线中文字幕| 亚洲男人影院| 影音先锋亚洲一区| 欧美高清视频免费观看| 免费成人你懂的| 亚洲视频 欧洲视频| 亚洲女人天堂av| 亚洲第一在线综合网站| 亚洲黄色大片| 欧美午夜片欧美片在线观看| 亚洲视频欧美在线| 一本久久综合亚洲鲁鲁五月天| 亚洲美女av电影| 国产视频一区三区| 亚洲精品美女在线观看播放| 国产精品视频99| 久久蜜桃av一区精品变态类天堂| 久久国产精品黑丝| 亚洲欧美日韩国产综合在线 | 欧美影片第一页| 久久久久久成人| 欧美一区2区三区4区公司二百| 久久精品一区二区三区中文字幕 | 欧美日韩国产首页在线观看| 欧美精品久久99久久在免费线| 亚洲欧美日韩视频一区| 欧美成人第一页| 欧美激情精品久久久久久变态 | 欧美精品网站| 久久免费黄色| 国产女人精品视频| **欧美日韩vr在线| 久久精品夜色噜噜亚洲aⅴ| 久久福利影视| 国产自产高清不卡| 老司机成人网| 亚洲三级视频| 亚洲欧美日韩综合| 国产欧美日韩一级| 欧美在线观看一区二区| 久久亚洲精选| 99国内精品久久| 欧美亚洲不卡| 久久免费视频在线观看| 亚洲国产小视频| 亚洲一级在线观看| 激情综合久久| 欧美日韩亚洲系列| 午夜影院日韩| 激情文学综合丁香| 久久亚洲私人国产精品va| 欧美激情一二三区| 欧美在线一二三区| 亚洲精品乱码久久久久久| 欧美三级在线| 狂野欧美激情性xxxx| 一本久久综合亚洲鲁鲁五月天| 欧美激情亚洲| 久久久久青草大香线综合精品| 日韩一区二区电影网| 久久综合电影| 欧美色中文字幕| 美女国产一区| 欧美一级精品大片| 亚洲一区二区三区在线观看视频| 欧美激情片在线观看| 久久激情综合网| 欧美在线视频网站| 亚洲第一在线视频| 国产精品亚洲综合久久| 欧美另类videos死尸| 久久综合给合久久狠狠狠97色69| 亚洲午夜久久久| 亚洲深夜福利| 亚洲天堂成人| 中文精品在线| 午夜在线不卡| 欧美中文字幕精品| 日韩小视频在线观看专区| 亚洲视频一区二区免费在线观看| 亚洲激情av在线| 亚洲精品国久久99热| 亚洲日本在线视频观看| 亚洲理论电影网| 亚洲一区二区免费看| 欧美女同视频| 国产精品日本一区二区| 国语对白精品一区二区| 国产日韩精品电影| 在线免费观看视频一区| 99香蕉国产精品偷在线观看| 亚洲欧美日本伦理| 蜜臀av国产精品久久久久| 亚洲国产裸拍裸体视频在线观看乱了 | 一区二区三区精品| 亚洲视频免费| 久久影视精品| 99在线热播精品免费| 久久av二区| 91久久国产综合久久| 亚洲欧美国产高清| 欧美另类69精品久久久久9999| 国产一区二区三区黄| 99热这里只有精品8| 麻豆成人综合网| 日韩一级免费观看| 99精品视频一区| 免费在线观看日韩欧美| 国产综合久久久久久| 欧美国产大片| 伊人精品成人久久综合软件| 亚洲欧美日韩精品在线| 亚洲欧洲午夜| 蜜桃久久精品乱码一区二区| 韩国一区二区三区美女美女秀| 亚洲欧美视频在线| 亚洲男人的天堂在线| 国产精品日韩二区| 欧美亚洲午夜视频在线观看| 一区二区三区国产精华| 欧美激情视频网站| 一本大道av伊人久久综合| 亚洲精品一区二| 国产精品美女久久久久aⅴ国产馆| 亚洲五月六月| 性8sex亚洲区入口| 亚洲国产精品一区二区www在线 | 久久久久久久久久久一区 | 国产一区日韩一区| 欧美gay视频激情| 欧美日韩国产综合视频在线观看中文 | 欧美国产日韩一区二区在线观看| 国产嫩草影院久久久久| 欧美黄色免费网站| 一区二区国产日产| 一区二区三区精品久久久| 99re热精品| 狠狠色综合播放一区二区| 91久久综合亚洲鲁鲁五月天| 国产精品成人国产乱一区| 免费看黄裸体一级大秀欧美| 欧美精品久久一区二区| 久久久精品日韩| 欧美精品亚洲| 鲁大师成人一区二区三区| 欧美日韩专区| 亚洲国内自拍| 在线观看亚洲视频| 亚洲午夜精品一区二区| 99精品免费| 欧美va亚洲va国产综合| 久久久久网站| 国产精品三级久久久久久电影| 亚洲大片av| 亚洲精品1区| 免播放器亚洲一区| 欧美成人一品| 亚洲国产影院| 欧美日韩国产a| 亚洲国产综合视频在线观看| 亚洲精品影院| 国产精品久久久久久久久久ktv| 亚洲伦理网站| 亚洲欧美一区二区三区在线| 国产精品成人免费视频| 亚洲网站视频福利| 免费成人网www| 99精品国产福利在线观看免费| 欧美国产免费| 一区二区精品国产| 久久精品理论片| 亚洲国产毛片完整版| 欧美日韩一区二区欧美激情| 亚洲一区二区三区视频| 麻豆91精品| 亚洲一区二区三区乱码aⅴ| 国产一区二区三区久久悠悠色av| 久久久国产精品一区二区中文| 亚洲国产精品久久久久秋霞影院 | 你懂的成人av| 亚洲三级色网| 亚洲一区二区精品在线| 久久一区国产| 亚洲女优在线| 亚洲区国产区| 狠狠色丁香婷婷综合| 欧美性色综合| 欧美mv日韩mv国产网站app| 欧美一级一区| 午夜欧美不卡精品aaaaa| 日韩视频在线一区二区三区| 欧美激情一区二区| 欧美91大片|