Skip to main content
1 of 2

Some architectures (like ARM) don't support memory segments at all. If Linux had been source-dependent on segments, it couldn't have been ported to those architectures very easily.

Looking at the broader picture, the failure of memory segments has to do with the continuing popularity of C and pointer arithmetic. C development is more practical on an architecture with flat memory; and if you want flat memory, you choose memory paging.

There was a time around the turn of the 80's when Intel, as an organization, was anticipating future popularity of Ada and other higher-level programming languages. This is basically where some of their more spectacular failures, like the awful APX432 and 286 memory segmentation, came from. With the 386 they capitulated to flat memory programmers; paging and a TLB was added and the segments were made resizable to 4GB. And then AMD basically removed segments with x86_64 by making the base reg a dont-care/implied-0 (except for fs? for TLS I think?)

Having said that, the advantages of memory segments are obvious - switching address spaces without having to repopulate a TLB.