{"id":38233,"date":"2004-08-05T07:00:00","date_gmt":"2004-08-05T07:00:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/oldnewthing\/2004\/08\/05\/the-oft-misunderstood-3gb-switch\/"},"modified":"2004-08-05T07:00:00","modified_gmt":"2004-08-05T07:00:00","slug":"the-oft-misunderstood-3gb-switch","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/oldnewthing\/20040805-00\/?p=38233","title":{"rendered":"The oft-misunderstood \/3GB switch"},"content":{"rendered":"<p>It&#8217;s simple to explain what it does, but people often misunderstand.<\/p>\n<p>  The \/3GB switch changes the way the 4GB virtual address space is split up.  Instead of splitting it as 2GB of user mode virtual address space  and 2GB of kernel mode virtual address space,  the split is 3GB of user mode virtual address space and 1GB of kernel mode  virtual address space.  <\/p>\n<p>  That&#8217;s all.  <\/p>\n<p>  And yet people think it does more than that.  <\/p>\n<p>  I think the problem is that people think that &#8220;virtual address space&#8221;  means something other than just &#8220;virtual address space&#8221;.  <\/p>\n<p>  The term &#8220;address space&#8221; refers to how a numerical value (known  as an &#8220;address&#8221;) is interpreted when it is used to access some  type of resource.  There is a physical address space; each address  in the physical address space refers to a byte in a memory chip  somewhere.  (Note for pedants: Yes, it&#8217;s actually spread out over  several memory chips, but that&#8217;s not important here.)  There is an I\/O address space; each address in the I\/O address space  allows the CPU to communicate with a hardware device.  <\/p>\n<p>  And then there is the virtual address space.  When people  say &#8220;address space&#8221;, they usually mean &#8220;virtual address space&#8221;.  <\/p>\n<p>  The virtual address space is the set of possible pointer values  (addresses) that can be used at a single moment by the processor.  In other words, if you have  an address like 0x12345678, the virtual address space determines what  you get if you try to access that memory.  The contents of the virtual address space changes over time, for example,  as you allocate and free memory.  It also varies based on context: each process has its own virtual address  space.  <\/p>\n<p>  Saying that 2GB (or 3GB) of virtual address space is available to user mode  means that at any given moment in time, out of the 4 billion  virtual addresses available in a 32-bit value, 2 billion  (or 3 billion) of them are potentially usable by user-mode code.  <\/p>\n<p>  Over the next few entries, I&#8217;ll talk about the  various consequences and misinterpretations of the \/3GB switch.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>It&#8217;s simple to explain what it does, but people often misunderstand. The \/3GB switch changes the way the 4GB virtual address space is split up. Instead of splitting it as 2GB of user mode virtual address space and 2GB of kernel mode virtual address space, the split is 3GB of user mode virtual address space [&hellip;]<\/p>\n","protected":false},"author":1069,"featured_media":111744,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[26],"class_list":["post-38233","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oldnewthing","tag-other"],"acf":[],"blog_post_summary":"<p>It&#8217;s simple to explain what it does, but people often misunderstand. The \/3GB switch changes the way the 4GB virtual address space is split up. Instead of splitting it as 2GB of user mode virtual address space and 2GB of kernel mode virtual address space, the split is 3GB of user mode virtual address space [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/38233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/users\/1069"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/comments?post=38233"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/posts\/38233\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media\/111744"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/media?parent=38233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/categories?post=38233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/oldnewthing\/wp-json\/wp\/v2\/tags?post=38233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}