According to the GNU document:
int square (int) __attribute__ ((const))tells GCC that subsequent calls to function square with the same argument value can be replaced by the result of the first call regardless of the statements in between.
I expect the following code will be slow down when removing __attribute__((const)) in the function declaration.
#include <stdio.h>
#include <limits.h>
int my_double(int b) __attribute__((const));
//int my_double(int b);
int main(void) {
long result = 0;
for (int i = 0; i < INT_MAX/2; i )
{
result = my_double(5);
}
printf("%ld\n", result);
}
int my_double(int b) {
return b*2;
}
However, the experiments show that __attribute__((const)) does not affect timing results significantly. Does anyone know the reason? Thanks.
By the way, I use the following commands to clear any cache that might pollute the timing results of each experiment.
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
sudo swapoff -a
sudo swapon -a
And use /usr/bin/time to time the experiments.
PS. The corresponding assembly is as follows: (I am unfamiliar with assembly)
.file "attribute-o.c"
.text
.section .rodata
.LC0:
.string "%ld\n"
.text
.globl main
.type main, @function
main:
.LFB0:
.cfi_startproc
endbr64
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
movq $0, -8(%rbp)
movl $0, -12(%rbp)
jmp .L2
.L3:
movl $5, 