One thing I really miss in a lot of library documentation is performance guarantees similar to that of the C++ standard library.<p>Yes yes, this method lets me find the index of an element, but is it O(log N) or O(N)? I need to know, otherwise I might inadvertently create O(N^2) code.
Update: Microsoft has built a fix for the issue.<p><a href="https://twitter.com/mamyun/status/1120878048620892166" rel="nofollow">https://twitter.com/mamyun/status/1120878048620892166</a><p>Pretty quick work - two days after the blog post.
It looks like the author of this article tested with Windows 7 and Windows 10.<p>What would be really interesting is if the same tests could be performed with all of the other, older versions of Windows... why? Well, then you'd know the version of Windows in which this phenomena first appears (it could not possibly have existed in Windows 1.0 and probably didn't exist until several subsequent versions later). So that knowledge of where it first appears could be interesting... That is, I'd love a Raymond Chen deep-dive explanation for the Microsoft "why" of this phenomenon...
This article is about the Control Flow Guard [1] security feature introduced in Win 8.1. The same blog has a few articles about it. Seems that it wasn't performance tested against large binaries in its original development.<p>[1] <a href="https://docs.microsoft.com/en-us/windows/desktop/secbp/control-flow-guard" rel="nofollow">https://docs.microsoft.com/en-us/windows/desktop/secbp/contr...</a>
It's very easy to accidentally create O(n^2) code. For example, take a look at the test case added here:<p><a href="https://github.com/google/guava/commit/4e41d621c3f413eb31da2d31b6c9d9713cd851f6" rel="nofollow">https://github.com/google/guava/commit/4e41d621c3f413eb31da2...</a>
Why someone needs 1000 created processes on one server? I worked with IO and CPU bound tasks and never needed more than ~50 processes, even on very big servers. Is there any practical reason for this (besides pure interest)?
O(n^2) is polynomial and perfectly acceptable for many use cases. Basic multiplication is O(n^2), as are many other operations.<p><pre><code> for i = 1 -> n:
for j = 1 -> n:
do something
</code></pre>
Although, if the outside n differs in size from the inside n, it should be written O(nm).
Maybe he should have split his 120Mb executable into more executables ... or using a sane number of processes.<p>It would be bad to have the OS cover this use case by default.