छोड़ दें मुझे लगता है कि ईएमएसस्क्रिप्ट के साथ, अपेक्षाकृत छोटी सी ++ फ़ाइलों को भी बड़ी जावास्क्रिप्ट फ़ाइलों में जल्दी से बदल दिया जा सकता है। उदाहरण:कुछ सी ++ उपप्रणाली
#include <memory>
int main(int argc, char** argv) {
std::shared_ptr<int> sp(new int);
}
तरह
em++ -std=c++11 -s DISABLE_EXCEPTION_CATCHING=1 -s NO_FILESYSTEM=1 \
-s NO_BROWSER=1 -s NO_EXIT_RUNTIME=1 -O3 -o foo.js foo.cc
परिणामी फ़ाइल 400K बड़ा खत्म हो गया है एक आदेश का उपयोग हाल ही में एक emsdk के साथ इस संकलित करें। -g
मैं में फेंक दिया
grep -n '^function _' foo.js | c++filt -_
करने और देखने कार्यों किस प्रकार हम देखते है कर सकते हैं। यहां कुछ उदाहरण दिए गए हैं:
std::__1::moneypunct<char, false>::do_thousands_sep() const
std::__1::locale::~locale()
std::__1::basic_string<wchar_t, …>::~basic_string()
std::__1::time_get<…>::__get_day(…) const
std::__1::codecvt<wchar_t, char, __mbstate_t>::codecvt(unsigned int)
std::__1::locale::__imp::install(std::__1::locale::facet*, long)
_printf_core
मैं इनमें से किसी को भी नहीं बुला रहा हूं, लेकिन फिर भी सभी कार्यों को शामिल किया जा रहा है। शायद उनमें से कई वर्चुअल फ़ंक्शन टेबल में शामिल हैं। अन्य कुछ स्थिर प्रारंभकर्ता के कारण हो सकते हैं।
यदि यह मेरे एचडीडी पर कहीं भी एक साझा लाइब्रेरी के खिलाफ सामान्य कोड जुड़ा हुआ था; मैं ऑब्जेक्ट नहीं करता। लेकिन जावास्क्रिप्ट कोड में आधे मेगाबाइट को स्थानांतरित करने के लिए, केवल एक साझा पॉइंटर के लिए? इससे बचने के लिए एक रास्ता होना चाहिए।