<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                對于前段工程師來說,C/C++擴展模塊或許生成比較生疏和晦澀,但是如果你了解了它,在模塊出現性能瓶頸時將會對你有極大幫助。 JavaScript的一個典型弱點就是位運算。JavaScript的位運算參照Java的位運算實現,但是Java位運算是在int型數字的基礎上進行的,而JavaScript中只有double型的數據類型,在進行位運算的過程中,需要將double型轉換為int型,然后再進行。所以,在JavaScript層面上做位運算的效率并不高。 在應用中,會頻繁出現位運算的需求,包括轉碼、編碼等過程,如果通過JavaScript來實現,CPU資源將會耗費很多,這時編寫C/C++擴展模塊來提升性能的機會來了。 C/C++擴展模塊屬于文件模塊中的一類。前面講述文件模塊的編譯部分時提到,C/C++模塊通過預先編譯為.node文件,然后調用process.dlopen()方法加載執行。在這一節中,我們將分析整個C/C++擴展模塊的編寫、編譯、加載、導出的過程。 在開始編寫擴展模塊之前,需要強調的一點是,Node的原生模塊一定程度上是可以跨平臺的,其前提條件是源代碼可以支持在 `*nix` 和Windows上編譯,其中,`*nix`下通過g++/gcc等編譯器編譯為動態鏈接共享對象文件(.so),在Windows下則需要通過Visual C++ 的編譯器編譯為動態鏈接庫文件(.dll),如圖: ![](https://box.kancloud.cn/2016-08-26_57bf1fe3d5827.png) 這里有一個讓人迷惑的地方,那就是引用加載時卻是.node文件。其實.node文件的擴展名只是為了看起來更自然一點,不會因為平臺差異產生不同的感覺。實際上,在Windows下它是一個.dll文件,在`*nix上`它是一個.so文件。為了實現跨平臺,dlopen()方法在內部實現時區分了平臺,分別用的是加載.so和.dll的方式。上圖中,為擴展模塊在不同平臺上編譯和加載的詳細過程。 值得注意的是,一個平臺下的.node文件在另一個平臺下是無法加載執行的,必須重新用各自平臺下的編譯器編譯為正確的.node文件。
                  <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>

                              哎呀哎呀视频在线观看