From: | Heikki Linnakangas <hlinnaka(at)iki(dot)fi> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-hackers(at)postgresql(dot)org |
Subject: | Re: Manipulating complex types as non-contiguous structures in-memory |
Date: | 2015-04-17 14:21:58 |
Message-ID: | 55311706.7020206@iki.fi |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 04/17/2015 03:58 PM, Tom Lane wrote:
> Heikki Linnakangas <hlinnaka(at)iki(dot)fi> writes:
>> On 03/28/2015 11:24 PM, Tom Lane wrote:
>>> + * Macros for iterating through elements of a flat or expanded array.
>
>> How about a struct instead?
>
>> struct ArrayIter {
>> Datum datumptr;
>> bool isnullptr;
>> char dataptr;
>> bits8 bitmapptr;
>> int bitmask
>> }
>
>> Seems more natural.
>
> Yes, and much less efficient I'm afraid. Most compilers would be unable
> to put the variables into registers, which is important for these inner
> loops.
That would surprise me. Surely most compilers know to keep fields of a
struct in registers, when the struct itself or a pointer to it is not
passed anywhere.
>> How about turning these into functions?
>
> Likewise. The point of doing it like this was to avoid taking an
> efficiency hit compared to the existing code.
>
> It's conceivable that we could avoid such a hit by marking the functions
> all "inline", but I'm not certain that they'd get inlined, and the
> question of whether the variables could be in registers would remain.
Ok, this one I believe.
- Heikki
From | Date | Subject | |
---|---|---|---|
Next Message | Tom Lane | 2015-04-17 14:27:21 | Re: patch for xidin |
Previous Message | Zhang Zq | 2015-04-17 14:14:16 | patch for xidin |