<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 44.3\. 內存管理 **Table of Contents** + [SPI_palloc](#calibre_link-1737)?--?在上層執行器環境里分配內存 + [SPI_repalloc](#calibre_link-1738)?--?在上層執行器環境里重新分配內存 + [SPI_pfree](#calibre_link-1739)?--?在上層執行器環境里釋放內存 + [SPI_copytuple](#calibre_link-1740)?--?在上層執行者環境里制作一個行的拷貝 + [SPI_returntuple](#calibre_link-1741)?--?準備把一個行當作 Datum 返回 + [SPI_modifytuple](#calibre_link-1742)?--?通過替換一個給出行的選定的字段創建一行 + [SPI_freetuple](#calibre_link-1743)?--?釋放在上層執行者環境里分配的一行 + [SPI_freetuptable](#calibre_link-1744)?--?釋放一個由`SPI_execute`或者類似的函數創建的行集 + [SPI_freeplan](#calibre_link-1745)?--? 釋放一個前面保存的預備語句 PostgreSQL在_內存環境_中分配內存, 它提供了在許多地方分配的,有著不同的生命期的許多內存塊的一個方便的管理方法。 刪除一個環境則釋放所有在其內部分配的內存。因此,沒必要跟蹤獨立的對象以避免內存泄漏; 而是只要管理少量的環境。`palloc`和相關的函數從"當前" 的環境中分配內存。 `SPI_connect`創建一個新的內存環境并且將其標記為當前的環境。 `SPI_finish`恢復前一個內存環境并且刪除`SPI_connect` 創建的環境。這些動作確保在你的過程中分配的臨時內存在過程結尾的時候都被回收,避免內存泄漏。 不過,如果你的過程需要返回一個已分配的內存對象(比如一個傳遞引用的數據類型), 那么你就不能用`palloc`分配返回的對象, 至少是不能在你已經和 SPI 連接上的時候。如果你試圖這么做, 那么該對象將在`SPI_finish`的時候被釋放, 因而你的過程就不能可靠地工作了!要解決這個問題,使用`SPI_palloc` 分配內存給你的返回對象。`SPI_palloc`從"上層執行者環境" 中分配空間,也就是調用`SPI_connect`時候的當前環境內存環境, 該環境是從你的過程返回數值的正確環境。 如果還沒有連接到 SPI 的時候調用它,`SPI_palloc` 的行為和簡單的`palloc`一樣。在一個過程和 SPI 管理器連接之前, 當前的內存環境是上層執行者環境,因此所有該過程使用`palloc` 或者 SPI 工具函數分配的空間都是在這個環境中分配的。 在調用`SPI_connect`之后,當前環境是該過程私有的, 由`SPI_connect`制作的環境。所有通過`palloc`、 `repalloc`或者 SPI 工具函數(除了`SPI_copytuple`、 `SPI_returntuple`、`SPI_modifytuple`和 `SPI_palloc`)分配的內存都是在這個環境中分配的。 如果一個過程與 SPI 管理器斷開(通過`SPI_finish`), 那么當前環境恢復為上層執行器環境, 并且所有在該過程的內存環境中分配的內存都釋放掉并且不能再次使用! 所有在本節內描述的函數都可以在已連接的和未連接的過程中使用。 在未連接的過程中,他們的行為和下層的原始后端函數(`palloc`等)相同。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看