第三章 公共模組

2021-07-11 21:59:44 字數 1350 閱讀 4802

宣告:此文章翻譯自box2d v2.2.0使用者手冊,僅供學習參考。

3.1 關於

公共模組包括了設定,記憶體管理以及向量數學。

3.2 設定

b2settings.h標頭檔案包括如下: 型別

box2d定義了大量諸如float32,int8型別等等。可以方便的確定結構的大小。常量

box2d定義了一些常量。這些都被記錄在b2settings.h檔案中。正常情況下不需要調整這些常量。

box2d使用浮點數來進行模式和碰撞計算。由於捨入方面誤差的原因需要定義一些公差。其中一些公差是絕對的,一些公差是相對的。絕對的公差使用mks(meters-kilometers-seconds)單位。

設定檔案中定義了b2alloc和b2free兩個方法,用於大的記憶體分配。你可以使用這兩個方法來呼叫你的記憶體管理系統。

版本號

在程式執行的時候你可以通過查詢b2version這個結構體來獲取當前的版本號。

3.3 記憶體管理

box2d的大量設計都是為了能夠快速和有效的使用記憶體。在本節,我將討論怎樣以及為什麼要box2d來分配記憶體。

box2d更傾向於分配大量的小物件(約50~300位元組)。若使用malloc或者new在記憶體堆上分配將是低效的,並且會產生記憶體碎片。大量小物件或許會有很短的生命週期,例如接觸(contacts),不過可以持續幾個時間步長。所以我們需要乙個分配器來有效的為這些物件提供堆記憶體。

box2d的解決方案是使用乙個叫做b2blockallocator的小物件分配器(small object allocator,soa)。小物件分配器持有乙個可任意增長大小不定的記憶體池。當需要記憶體的時候,soa根據需求返回一塊大小合適的記憶體空間。當記憶體塊釋放之後,再返還給記憶體池。這兩個操作很快,只會引起很小的堆流量。

既然box2d使用soa,那麼你就永遠不要使用new和malloc建立物體,定製器(fixture)或者聯結器。無論如何,你仍然需要建立乙個屬於你自己的b2world物件。b2world類提供了建立物體,定製器(fixture)以及聯結器的工廠方法。那麼這樣box2d就可以使用soa並且可以為你隱藏血腥(譯者注:這裡指對記憶體的分配和**,也顯示了作者很幽默)的細節。永遠不要呼叫delete或者是free來釋放物體,定製器(fixture)或者聯結器。

當執行乙個步長的時候,box2d需要臨時記憶體空間。為了完成這個任務,box2d會呼叫乙個叫做b2stackallocator的棧分配器來防止單步堆分配。你不需要關心棧分配器,但是了解一下還是不錯的。

3.4 數學

box2d包含了乙個簡單的小巧的向量和矩陣模組。這部分設計用來滿足box2d內部使用和api介面的需要。這部分所有成員都是公開的,所以你可以在你的應用程式中自由的使用。

數學庫盡量保持著簡單,保持著box2d的可移植性和可維護性。

Python 初學筆記 第三章 模組

目錄模組就是工具包,工具包裡有許多的工具可以使用。模組便於管理,乙個 py 檔案就是乙個模組。模組的分類 模組的匯入 呼叫 乙個 py 檔案就可以是乙個模組。匯入自定義模組和模組的查詢路徑有關,可以用 sys.path 檢視,需要全域性都能匯入模組可以將模組放在 site packages 第三方庫...

第三章 堆疊

1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...

第三章 曙光

第三章 曙光 第二場校園招聘開始了。其實,洋對這個公司的不是很了解。因為前幾天突然在bbs上面看到了這個公司的招聘資訊,洋覺得這個公司不錯,就上網投了簡歷。接下來的乙個多小時,讓洋很震撼!想不到這個公司這個厲害,而且無論從哪方面來說,絕對不比之前的那個公司差。想不到自己的乙個不經意的決定到了這個大的...