Re: Avoid unecessary MemSet call (src/backend/utils/cache/relcache.c)
От | Ranier Vilela |
---|---|
Тема | Re: Avoid unecessary MemSet call (src/backend/utils/cache/relcache.c) |
Дата | |
Msg-id | CAEudQAopYew853Su+YU1+ZBcXYPyz5GeymptNV4KJJWyeW9nAg@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Avoid unecessary MemSet call (src/backend/utils/cache/relcache.c) (Peter Eisentraut <peter.eisentraut@enterprisedb.com>) |
Список | pgsql-hackers |
Em qui., 7 de jul. de 2022 às 08:00, Peter Eisentraut <peter.eisentraut@enterprisedb.com> escreveu:
On 18.05.22 15:52, Peter Eisentraut wrote:
> On 18.05.22 01:18, Justin Pryzby wrote:
>> Take the first one as an example. It says:
>>
>> GenericCosts costs;
>> MemSet(&costs, 0, sizeof(costs));
>>
>> You sent a patch to change it to sizeof(GenericCosts).
>>
>> But it's not a pointer, so they are the same.
>
> This instance can more easily be written as
>
> costs = {0};
The attached patch replaces all MemSet() calls with struct
initialization where that is easily possible. (For example, some cases
have to worry about padding bits, so I left those.)
Sounds great.
#include <stdio.h>
#include <string.h>
int main(void) {
bool nulls[4] = {0};
int i;
memset(nulls, 0, sizeof(nulls));
for(i = 0; i < 4; i++)
{
nulls[i] = 0;
}
return 1;
}
main:
push rbp
mov rbp, rsp
sub rsp, 16
mov DWORD PTR [rbp-8], 0 // bool nulls[4] = {0}; lea rax, [rbp-8]
mov edx, 4
mov esi, 0
mov rdi, rax
call memset
mov DWORD PTR [rbp-4], 0
jmp .L2
.L3:
mov eax, DWORD PTR [rbp-4]
cdqe
mov BYTE PTR [rbp-8+rax], 0
add DWORD PTR [rbp-4], 1
.L2:
cmp DWORD PTR [rbp-4], 3
jle .L3
mov eax, 1
leave
ret
Only one line using {0}.
+1
regards,
Ranier Vilela
В списке pgsql-hackers по дате отправления: