Дано: односвязный список
Нужно: развернуть список за один проход так, чтобы стало
Каждый из нас выводит гулять свою мысль впереди себя, как обезьяну на поводке. Когда читаешь, имеешь дело с двумя такими обезьянами: одной своей и одной чужой. Или, что еще хуже, с одной обезьяной и одной гиеной. Вот и смотри, чем кого накормить. Ведь вкусы у них разные...
Милорад Павич, "Хазарский словарь"
-Wconversion теперь выводит предупреждение при некорректных попытках привести целочисленный тип к enum, а также включена экспериментальная поддержка стандарта C++0x. И много чего другого не менее интересного...
int main ()
{
int c = 0;
int size = 10000;
int *a = new int[size * size];
for (int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j)
{
a[j * size + i] = c++;
}
}
delete [] a;
return 0;
}
0 10 20 30 40 50 60 70 80 90
1 11 21 31 41 51 61 71 81 91
2 12 22 32 42 52 62 72 82 92
3 13 23 33 43 53 63 73 83 93
4 14 24 34 44 54 64 74 84 94
5 15 25 35 45 55 65 75 85 95
6 16 26 36 46 56 66 76 86 96
7 17 27 37 47 57 67 77 87 97
8 18 28 38 48 58 68 78 88 98
9 19 29 39 49 59 69 79 89 99
g++ и sunCC:-fast в suncc анализирует окружение и подбирает набор опций компилятора для максимального быстродействия. Видно, что sunCC в режиме оптимизации дает результаты в разы лучше, чем g++. А именно — в 5 раз. Хм...Цель данной статьи совсем не в том, чтобы принизить возможности GCC. Для замеров использовался GCC версии 4.1. На данный момент существуют более новые версии этого компилятора, которые могут показать лучшие результаты оптимизации этого кода.
-g0. Эта опция сохраняет в объектном файле отладочную информацию (в том числе и комментарии компилятора), но не запрещает инлайнить функции. Для просмотра комментариев нужно использовать программу er_src, которая также поставляется с Sun Studio.
$ sunCC -g0 -fast a.cpp
$ er_src a.o
Source file: ./a.cpp
Object file: ./a.o
Load Object: ./a.o
1. int main ()
2. {
3. int c = 0;
4. int size = 10000;
5. int *a = new int[size * size];
6.
Source loop below has tag L1
Induction variable substitution performed on L1
L1 interchanged with L2
7. for (int i = 0; i < size; ++i)
8. {
Source loop below has tag L2
Induction variable substitution performed on L2
L2 interchanged with L1
9. for (int j = 0; j < size; ++j)
10. {
11. a[j * size + i] = c++;
12. }
13. }
14.
15. delete [] a;
16. return 0;
17. }
a[j * size + i] = c++;a[j * size + i] = i * size + j;
int main ()
{
int c = 0;
int size = 10000;
int *a = new int[size * size];
for (int j = 0; j < size; ++j)
{
for (int i = 0; i < size; ++i)
{
a[j * size + i] = i * size + j;
}
}
delete [] a;
return 0;
}
#define FUNC (A) ...". Только так — "#define FUNC(A) ...".char *str = "abcd";' устарело и больше не должно использоваться. Причем предупреждение появляется даже без флагов -Wall, -Wextra и прочих. Как известно, использование в программе таких объявлений может привести к непредсказуемым последствиям. Вместо этого нужно использовать 'const char *str = "abcd";'. И это правильно.vmware-user прописывается в автозапуск, то ли запуска не происходит, либо что-то не срабатывает, я не разбирался. vmware-user руками, либо прописать его в System->Preferences->Sessions.
/usr/bin/ld: ./a.out: hidden symbol `__gcov_merge_add' in /usr/lib/gcc/i486-linux-gnu/4.1.3/libgcov.a(_gcov_merge_add.o) is referenced by DSO
/usr/bin/ld: final link failed: Nonrepresentable section on output
-fprofile-arcs -ftest-coverage.
=== a.cpp
#include <stdio.h>
extern unsigned long myfunc ();
int main (int argc, char **argv)
{
unsigned long z = myfunc();
printf("%08x\n", z);
return 0;
}
=== b.cpp
#include <time.h>
unsigned long myfunc ()
{
return time(0);
}
b.cpp делаем статическую библиотеку libmy.a, а из файла a.cpp — исполняемый модуль a.out:
g++ -c -fprofile-arcs -ftest-coverage b.cpp
g++ -shared -o libmy.a ./b.o
g++ -c -fprofile-arcs -ftest-coverage a.cpp
g++ -o a.out a.o -L. -lmy
g++ -c -fprofile-arcs -ftest-coverage b.cpp
g++ -shared -o libmy.a ./b.o
g++ -c -fprofile-arcs -ftest-coverage a.cpp
g++ -o a.out a.o -L. -lmy -lgcov
/usr/bin/ld: ./a.out: hidden symbol `__gcov_merge_add' in /usr/lib/gcc/i486-linux-gnu/4.1.3/libgcov.a(_gcov_merge_add.o) is referenced by DSO
/usr/bin/ld: final link failed: Nonrepresentable section on output
g++ -c -fprofile-arcs -ftest-coverage b.cpp
g++ -shared -o libmy.a ./b.o -lgcov
g++ -c -fprofile-arcs -ftest-coverage a.cpp
g++ -o a.out a.o -L. -lmy -lgcov
-fprofile-arcs -ftest-coverage.
colordiff file1 file2
diff file1 file2 | colordiff
alias diff=colordiff.
# color diffs for CVS
function cvsdiff () {
if [ "$1" != "" ]; then
cvs diff $@ | colordiff;
else
cvs diff | colordiff;
fi
}
# color diffs for SVN
function svndiff () {
if [ "$1" != "" ]; then
svn diff $@ | colordiff;
else
svn diff | colordiff;
fi
}
colordiff file1 file2 | less -R
export LESS="-R"