git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2] Add a Windows-specific fallback to getenv("HOME");

From
Karsten Blees <karsten.blees@gmail.com>
Date
Jun 5, 2014, 20:03 UTC
Message-ID
<5390CD1E.5080500@gmail.com>
In-Reply-To
<alpine.DEB.1.00.1406051411580.14982@s15462909.onlinehome-server.info>
Am 05.06.2014 15:39, schrieb Johannes Schindelin:
> And in particular with your changes to Unicodify the complete environment,
> I am *highly* doubtful that child processes will be able to handle
> themselves properly, unless we spend a whole lot of time converting back
> and forth the environment when calling children.
The unicode version _does_ convert back and forth, in mingw_startup and make_environment_block, respectively. However, as the unicode environment is sorted, this is actually much faster than the original version.
To put things in perspective *:
entire mingw_startup: ~450 µs
 * _wgetmainargs: 25 µs
 * allocate+convert args and environment: 25 µs
 * qsort environment: 15 µs
 * winansi_init: 393 µs
entire mingw_spawnve_fd: ~1250 µs
 * make_environment_block: 25 µs
 * CreateProcessW: 690 µs
Now, the unicode mingw_getenv is O(log n) (~0.15 µs per call) and MSVCRT's getenv is O(n) (~3.6 µs per call).
A git command that just launches a script (e.g. git gui) calls getenv ~25 times. (3.6 µs - 0.15 µs) * 25 = 86 µs, i.e. this compensates the additional startup time (including qsort) more than twice.
(*) Measurements done via QueryPerformanceCounter, with 75 environment entries, on a Core i7 960, Windows 7 x64
-- 
-- 
*** Please reply-to-all at all times ***
*** (do not pretend to know who is subscribed and who is not) ***
*** Please avoid top-posting. ***
The msysGit Wiki is here: https://github.com/msysgit/msysgit/wiki - Github accounts are free.

You received this message because you are subscribed to the Google
Groups "msysGit" group.
To post to this group, send email to msysgit@googlegroups.com
To unsubscribe from this group, send email to
msysgit+unsubscribe@googlegroups.com
For more options, and view previous threads, visit this group at
http://groups.google.com/group/msysgit?hl=en_US?hl=en

--- 
You received this message because you are subscribed to the Google Groups "msysGit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to msysgit+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Previous: Johannes SchindelinNext: Johannes Schindelin
Message 26 of 31 in “Add a Windows-specific fallback to getenv("HOME");”
  1. Add a Windows-specific fallback to getenv("HOME");Stepan Kasal, Jun 4, 2014
  2. Duy NguyenJun 4, 2014
  3. Erik Faye-LundJun 4, 2014
  4. Karsten BleesJun 4, 2014
  5. Johannes SchindelinJun 4, 2014
  6. Erik Faye-LundJun 4, 2014
  7. Johannes SchindelinJun 4, 2014
  8. Stepan KasalJun 4, 2014
  9. Johannes SchindelinJun 4, 2014
  10. Stepan KasalJun 4, 2014
  11. Johannes SchindelinJun 4, 2014
  12. Git for Windows SDKPhilip Oakley, Jun 6, 2014
  13. Duy NguyenJun 4, 2014
  14. Sebastian SchuberthJun 6, 2014
  15. Johannes SchindelinJun 4, 2014
  16. Karsten BleesJun 5, 2014
  17. Add a Windows-specific fallback to getenv("HOME");Stepan Kasal, Jun 5, 2014
  18. Torsten BögershausenJun 5, 2014
  19. Add a Windows-specific fallback to getenv("HOME");Stepan Kasal, Jun 5, 2014
  20. Karsten BleesJun 5, 2014
  21. Erik Faye-LundJun 5, 2014
  22. Karsten BleesJun 5, 2014
  23. Stepan KasalJun 6, 2014
  24. Stepan KasalJun 5, 2014
  25. Johannes SchindelinJun 5, 2014
  26. Karsten BleesJun 5, 2014
  27. Johannes SchindelinJun 5, 2014
  28. Stepan KasalJun 5, 2014
  29. Karsten BleesJun 5, 2014
  30. Stepan KasalJun 4, 2014
  31. Johannes SchindelinJun 4, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.