v8_base.lib (compilé dans le cadre de node.js) est huuuuge. Pourquoi?

En faisant une vcbuild.bat Release , je vais avoir un répertoire lib comme celui-ci:

 $ ls -1Ssh Release/lib/ total 303M 263M v8_base.lib 22M openssl.lib 7.2M v8_snapshot.lib 6.2M v8_nosnapshot.lib 4.8M uv.lib 480K zlib.lib 88K http_parser.lib 

Le débogage est beaucoup mieux, mais toujours:

 $ ls -1Ssh Debug/lib/ total 102M 83M v8_base.lib 14M openssl.lib 2.1M uv.lib 1.6M v8_snapshot.lib 1.3M v8_nosnapshot.lib 352K zlib.lib 80K http_parser.lib 

Deux choses que je ne comprends pas de tout cela:

  • Pourquoi la v8 est-elle si grande?
  • Pourquoi une version Debug génère-t-elle des fichiers lib beaucoup plus petits?

Je suis sur Windows 7 64 bits.

Edit Je viens de comprendre que le target_arch par défaut est ia32 , pas x64 , quelle que soit l’architecture de la machine hôte. Les chiffres ci-dessus se rapportent donc à une version 32 bits. Les numéros 64 bits sont un peu plus gros (309 M / 128 M).

Pourquoi la v8 est-elle si grande?

Est-ce peut-être à cause de ses dépendances et de ses fonctionnalités? Comme:

 $ ls -1Ssh Release/obj/v8_base/|head -15 total 264M 5.1M hydrogen.obj 4.7M objects.obj 4.6M lithium-codegen-ia32.obj 4.4M lithium-ia32.obj 4.3M runtime.obj 4.3M hydrogen-instructions.obj 4.2M lithium-allocator.obj 4.1M lithium-gap-resolver-ia32.obj 3.7M comstackr.obj 3.7M isolate.obj 3.5M v8.obj 3.4M lithium.obj 3.3M heap.obj 3.3M api.obj 

Pourtant, semble un peu gros …

Pourquoi une version Debug génère-t-elle des fichiers lib beaucoup plus petits?

Est-ce que ce sont peut-être ces optimisations de vitesse que j’ai trouvées dans common.gypi ?

  'Release': { ... 'msvs_settings': { 'VCCLComstackrTool': { 'RuntimeLibrary': 0, # static release 'Optimization': 3, # /Ox, full optimization 'FavorSizeOrSpeed': 1, # /Ot, favour speed over size 'InlineFunctionExpansion': 2, # /Ob2, inline anything eligible 

Il m’a fallu du temps pour comprendre pourquoi le moteur V8 construisait de telles versions sur Windows.

Il y a une option -D “component = shared” que vous pouvez utiliser lors de la construction de V8 pour créer une lib plus petite v8.lib (~ 250kb) et les DLL nécessaires à V8.dll (~ 12mb), icui18n.dll (~ 2.5mb), icuuc.dll (~ 1.5mb).

 From the V8 Directory: third_party\python_26\python.exe build\gyp_v8 -G msvs_version=2010 -Dtarget_arch=x64 -D"component=shared" -G 

La vraie réponse est que vous n’avez pas choisi l’option de publication “release”. Le mode de libération réduit considérablement la taille.