Форум программистов, компьютерный форум CyberForum.ru

Инициализировать массив быстро? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка линейного однонаправленного списка http://www.cyberforum.ru/cpp-beginners/thread403820.html
Всем привет) Нужно отсортировать линейный однонаправленный список. Как это можно сделать? Причем нужно менять местами не данные, а указатели.. Вот код программы, список структур. Помогите плиз с сортировкой #include "stdafx.h" #include <clocale> #include <iostream>
C++ [C++] Арканоид Здравствуйте, я самый на то есть начинающий программист,поэтому сразу прошу прощения, если вопросы будут не очень коректными.Очень расчитываю на вашу помощь. Задача состоит в следующем. Нужно написать Арканоид на VisualС++(в игре должна присутствовать простая минюшка и хотябы два, три уровня.Причём написание нового уровня не должно сводиться к переписанию половины кода).Нужно использовать движок... http://www.cyberforum.ru/cpp-beginners/thread403817.html
Найти и вывести координаты центра окружности C++
Друзья, нужна помощь. Девушке задали лабы по СИ, она не шарит. Знакомых всех спросил, никто не может помочь. Вот она: 1. Диаметр окружности начинается в точке М1(x1,y1) и кончается в точке M2(x2,y2). Найти и вывести координаты её центра. 2. Числа X1 и X2 являются корнями приведенного квадратного уравнения. Найти и выве-сти наибольшее из чисел: sin(p) и cos(q), где p и q являются его вторым и...
system("") C++
Хотел узнать, есть справочник хотя бы о большинстве команд в system("")? Сам искал, ничего хорошего не нашел.
C++ Геометрические задачи http://www.cyberforum.ru/cpp-beginners/thread403780.html
Составить программу вычисления сторон треугольника, если известны радиус описанного вокруг него круга и градусные меры двух его углов. #include <iostream.h> #include <conio.h> #include <math.h> main() { float a, b, c, R, x, y, z; cout<<"Vvedit qradysny miry dvoh kytiv i radiys opusanogo kola: ";
C++ Минимальное количество монет Есть такая задача: Денежная система некоторой страны предоставляет монеты номиналом с, = 1, с2, ..., сN. Как выдать сумму S с помощью минимального числа монет? Вход. В первой строке — сумма S и количество номиналов N, во второй — значения номиналов: 1<N≤20, 1=с1<с2<...< сN≤50000, S≤100000. Выход. В первой строке — минимальное количество монет, во второй — N чисел (количества монет каждого... подробнее

Показать сообщение отдельно
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
10.12.2011, 22:12     Инициализировать массив быстро?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main()
{
    const size_t s = 10000;
    int a[s];
    int x;
    cin >> x;
    asm("int $3");
    for (size_t i = 0; i < s; i++)
        a[i] = x;
    cout << a[rand() % s] << endl;
}
g++, максимальная оптимизация:
Код
0040137B  |. 8B9424 5C9C000>MOV EDX,DWORD PTR SS:[ESP+9C5C]
00401382  |. 31DB           XOR EBX,EBX
00401384  |. 8D4424 1C      LEA EAX,DWORD PTR SS:[ESP+1C]
00401388  |> 891498         /MOV DWORD PTR DS:[EAX+EBX*4],EDX
0040138B  |. 43             |INC EBX
0040138C  |. 81FB 10270000  |CMP EBX,2710
00401392  |.^75 F4          \JNZ SHORT tt.00401388
+ ещё MMX/SSE/SSE2:
Код
0040138F  |. 8D4424 10      LEA EAX,DWORD PTR SS:[ESP+10]
00401393  |. 66:0F6E8C24 5C>MOVD MM1,DWORD PTR SS:[ESP+9C5C]
0040139C  |. 66:0F70C1 00   PSHUFW MM0,MM1,0
004013A1  |. 8D9424 509C000>LEA EDX,DWORD PTR SS:[ESP+9C50]
004013A8  |. 90             NOP
004013A9  |. 8DB426 0000000>LEA ESI,DWORD PTR DS:[ESI]
004013B0  |> 66:0F7F00      /MOVQ QWORD PTR DS:[EAX],MM0
004013B4  |. 83C0 10        |ADD EAX,10
004013B7  |. 39D0           |CMP EAX,EDX
004013B9  |.^75 F5          \JNZ SHORT tt.004013B0
Даже цикл по 16-байтной границе выровнен.

Добавлено через 10 минут
А с ключом -funroll-loops вообще замечательно
Код
0040138F   . 8D9424 509C000>LEA EDX,DWORD PTR SS:[ESP+9C50]
00401396   . 66:0F6E8C24 5C>MOVD MM1,DWORD PTR SS:[ESP+9C5C]
0040139F   . 66:0F70C1 00   PSHUFW MM0,MM1,0
004013A4   . 8D4424 10      LEA EAX,DWORD PTR SS:[ESP+10]
004013A8   . 89D1           MOV ECX,EDX
004013AA   . 29C1           SUB ECX,EAX
004013AC   . 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
004013B0   . 83E9 10        SUB ECX,10
004013B3   . C1E9 04        SHR ECX,4
004013B6   . 8D4424 20      LEA EAX,DWORD PTR SS:[ESP+20]
004013BA   . 83E1 07        AND ECX,7
004013BD   . 39D0           CMP EAX,EDX
004013BF   . 0F84 99000000  JE tt.0040145E
004013C5   . 85C9           TEST ECX,ECX
004013C7   . 74 67          JE SHORT tt.00401430
004013C9   . 83F9 01        CMP ECX,1
004013CC   . 74 49          JE SHORT tt.00401417
004013CE   . 83F9 02        CMP ECX,2
004013D1   . 74 3D          JE SHORT tt.00401410
004013D3   . 83F9 03        CMP ECX,3
004013D6   . 74 31          JE SHORT tt.00401409
004013D8   . 83F9 04        CMP ECX,4
004013DB   . 90             NOP
004013DC   . 8D7426 00      LEA ESI,DWORD PTR DS:[ESI]
004013E0   . 74 20          JE SHORT tt.00401402
004013E2   . 83F9 05        CMP ECX,5
004013E5   . 74 14          JE SHORT tt.004013FB
004013E7   . 83F9 06        CMP ECX,6
004013EA   . 74 08          JE SHORT tt.004013F4
004013EC   . 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
004013F0   . 8D4424 30      LEA EAX,DWORD PTR SS:[ESP+30]
004013F4   > 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
004013F8   . 83C0 10        ADD EAX,10
004013FB   > 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
004013FF   . 83C0 10        ADD EAX,10
00401402   > 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
00401406   . 83C0 10        ADD EAX,10
00401409   > 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
0040140D   . 83C0 10        ADD EAX,10
00401410   > 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
00401414   . 83C0 10        ADD EAX,10
00401417   > 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
0040141B   . 83C0 10        ADD EAX,10
0040141E   . 39D0           CMP EAX,EDX
00401420   . 74 3C          JE SHORT tt.0040145E
00401422   . 8DB426 0000000>LEA ESI,DWORD PTR DS:[ESI]
00401429   . 8DBC27 0000000>LEA EDI,DWORD PTR DS:[EDI]
00401430   > 66:0F7F00      MOVQ QWORD PTR DS:[EAX],MM0
00401434   . 66:0F7F40 10   MOVQ QWORD PTR DS:[EAX+10],MM0
00401439   . 66:0F7F40 20   MOVQ QWORD PTR DS:[EAX+20],MM0
0040143E   . 66:0F7F40 30   MOVQ QWORD PTR DS:[EAX+30],MM0
00401443   . 66:0F7F40 40   MOVQ QWORD PTR DS:[EAX+40],MM0
00401448   . 66:0F7F40 50   MOVQ QWORD PTR DS:[EAX+50],MM0
0040144D   . 66:0F7F40 60   MOVQ QWORD PTR DS:[EAX+60],MM0
00401452   . 66:0F7F40 70   MOVQ QWORD PTR DS:[EAX+70],MM0
00401457   . 83E8 80        SUB EAX,-80
0040145A   . 39D0           CMP EAX,EDX
0040145C   .^75 D2          JNZ SHORT tt.00401430
 
Текущее время: 19:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru