簡體   English   中英

如何檢測 C malloc 是否可用?

[英]How can I detect if C malloc available?

在 C 中,無論目標平台或編譯器如何,我如何檢測某種形式的malloc是否可用? 檢測_STDLIB_H_是否足夠?

我想包括一個使用 malloc 的 header 實用程序malloc但前提是它已經由庫用戶提供。

更新:該庫需要一些堆或堆棧 memory 分配,在編譯時可能知道也可能不知道其數量。 該庫可以在運行時計算所需的 memory 的確切數量。 因此,對於那些需要等到運行時並且可以/想要使用堆 memory 的人,我想讓自動分配可用。 但我不希望庫本身加載“stdlib.h”。

聽起來您想要做的是生成一個可以在獨立(嵌入式)和托管(非嵌入式)環境中使用的單一庫二進制文件。 這很棘手,但可能。

如果您正在構建一個 static 庫(它可能無論如何都需要 - 通常共享庫在嵌入式環境中沒有用處),您可以在您的庫的一部分中使用 malloc 並且只要該部分未被使用應用程序,它不會被包括在內,一切都會好起來的。 如果嵌入式應用程序使用需要 malloc 的東西,那么如果嵌入式環境不提供它,它們就會出現鏈接時錯誤。

因此,您最終需要為您的庫提供兩個入口點——一個需要 malloc,一個不需要——用戶(應用程序編寫者)需要調用適合其環境的一個。 您需要確保這兩個入口點包含在庫中,以便只需要鏈接一個(通常,只需確保它們位於不同的編譯單元中)。

但我不希望庫本身加載“stdlib.h”

該聲明表明對正在發生的事情存在根本性的誤解。 stdlib.h 是 header 文件,而不是庫,因此您不要(也不能)“加載”它。 您可以將它包含在您的源代碼中,但這只是為您提供庫中內容的聲明; 它不包括您圖書館中的任何圖書館。 如果你不使用 header 中的任何東西,它將沒有效果。 如果您確實使用了 header 中的東西,那將在您的庫中創建對標准庫的依賴關系,這些依賴關系需要在(應用程序)鏈接時解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM