Warning: mysqli::__construct(): (HY000/1203): User howardkn already has more than 'max_user_connections' active connections in D:\Inetpub\vhosts\howardknight.net\al.howardknight.net\includes\artfuncs.php on line 21
Failed to connect to MySQL: (1203) User howardkn already has more than 'max_user_connections' active connectionsPath: ...!feeds.phibee-telecom.net!news.mixmin.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: David Brown
Newsgroups: comp.arch
Subject: Re: 80286 protected mode
Date: Tue, 15 Oct 2024 12:38:40 +0200
Organization: A noiseless patient Spider
Lines: 48
Message-ID:
References: <2024Oct6.150415@mips.complang.tuwien.ac.at>
<2024Oct7.093314@mips.complang.tuwien.ac.at>
<7c8e5c75ce0f1e7c95ec3ae4bdbc9249@www.novabbs.org>
<2024Oct8.092821@mips.complang.tuwien.ac.at>
<2024Oct13.174537@mips.complang.tuwien.ac.at>
<3e885f3c9d768541e2b07180d5821a1f@www.novabbs.org>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 15 Oct 2024 12:38:40 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="47228e08c2736a5aef9f5441cfbf6fae";
logging-data="1754606"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1++OMi+no6wUrSRQAFqXKBy6uz+JSes9eI="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.11.0
Cancel-Lock: sha1:TtAeD6BpfP++wM1ISS8+Waf7H1M=
Content-Language: en-GB
In-Reply-To: <3e885f3c9d768541e2b07180d5821a1f@www.novabbs.org>
Bytes: 3027
On 14/10/2024 21:02, MitchAlsup1 wrote:
> On Mon, 14 Oct 2024 15:04:28 +0000, David Brown wrote:
>
>> On 13/10/2024 17:45, Anton Ertl wrote:
>
>> I do think it would be convenient if there were a fully standard way to
>> compare independent pointers (other than just for equality). Rarely
>> needing something does not mean /never/ needing it.
>
> OK, take a segmented memory model with 16-bit pointers and a 24-bit
> virtual address space. How do you actually compare to segmented
> pointers ??
void * p = ...
void * q = ...
uintptr_t pu = (uintptr_t) p;
uintptr_t qu = (uintptr_t) q;
if (pu > qu) {
...
} else if (pu < qu) {
...
} else {
...
}
If your comparison needs to actually match up with the real virtual
addresses, then this will not work. But does that actually matter?
Think about using this comparison for memmove().
Consider where these pointers come from. Maybe they are pointers to
statically allocated data. Then you would expect the segment to be the
same in each case, and the uintptr_t comparison will be fine for
memmove(). Maybe they come from malloc() and are in different segments.
Then the comparison here might not give the same result as a full
virtual address comparison - but that does not matter. If the pointers
came from different mallocs, they could not overlap and memmove() can
run either direction.
The same applies to other uses, such as indexing in a binary search tree
or a hash map - the comparison above will be correct when it matters.