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

Массив: Что быстрее: mass[n] или *(mass+n)? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти слова, содержащие букву “s” http://www.cyberforum.ru/cpp-beginners/thread621832.html
ребята,помогите пожалуйста с выполнением заданий.совсем недавно пришел с армии(8 дней),на покупку денег нету:(может тут кто откликнется с помощью?! 1.тема: ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ СТРОК.задание:Найти слова, содержащие букву “s” это выполнять в визуал с++ 6.0 под консолью..и как можно примитивнейшим языком и примитивнейшими командами.как в этом примере #include <string.h> #include...
C++ Проход по всем элементам односвязного списка с последующим присваиванием каждому его элементу соответствующее хэш-значение У меня есть односвязный линейный список: struct Element //Структура с инфополями и адресным полем { int x; //Инфополе. Значения из x будут передаваться в список Element *Next; //Адресное поле }; class Spisok { Element *Head; Element *Tail; http://www.cyberforum.ru/cpp-beginners/thread621820.html
Преобразовать строку, удалив каждый символ * и удвоив каждый символ, отличный от * C++
Дана строка преобразовать ее, удалив каждый символ * и удвоив каждый символ отличный от *.
C++ Дано предложение. Найти наибольшее количество идущих подряд пробелов
9)Дано предложение. Найти наибольшее количество идущих подряд пробелов.
C++ Лингвистический разбор предложения http://www.cyberforum.ru/cpp-beginners/thread621771.html
Кто-то баловался на эту тему? И есть ли готовые решения? Может какие-то уроки как лучше делать?
C++ HEAP CORRUPTION DETECTED - не понятно почему Помогите пожалуйста. Есть такой код: double e; char* w; /////// POINT 1 string q; size_t pos; string txtfile; Par.push_back(timuk); подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
10.07.2012, 20:47     Массив: Что быстрее: mass[n] или *(mass+n)?
Цитата Сообщение от Ksan Посмотреть сообщение
Что быстрее: mass[n] или *(mass+n) и стоит ли заморачиваться по этому поводу?
Поддерживаю alex_x_x.
Предлагаю рассмотреть код ниже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
using namespace std;
 
int fun1(char * str)
{
    int n = 0;
    while(*(str + n))
    {
        cout<<*(str + n);
        n = n + 1;
    }
    return n;
}
 
int fun2(char * str)
{
    int n = 0;
    while(str[n])
    {
        cout<<str[n];
        n = n + 1;
    }
    return n;
}
 
 
int main()
{
    char str[] = "blablabla";
    cout<<"fun1 ret len : "<<fun1(str)<<endl;
    cout<<"fun2 ret len : "<<fun2(str)<<endl;
    return 0;
}
Верней асмы fun1 и fun2

asm fun1
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
4:    int fun1(char * str)
5:    {
00401590   push        ebp
00401591   mov         ebp,esp
00401593   sub         esp,44h
00401596   push        ebx
00401597   push        esi
00401598   push        edi
00401599   lea         edi,[ebp-44h]
0040159C   mov         ecx,11h
004015A1   mov         eax,0CCCCCCCCh
004015A6   rep stos    dword ptr [edi]
6:        int n = 0;
004015A8   mov         dword ptr [ebp-4],0
7:        while(*(str + n))
004015AF   mov         eax,dword ptr [ebp+8]
004015B2   add         eax,dword ptr [ebp-4]
004015B5   movsx       ecx,byte ptr [eax]
004015B8   test        ecx,ecx
004015BA   je          fun1+4Dh (004015dd)
8:        {
9:            cout<<*(str + n);
004015BC   mov         edx,dword ptr [ebp+8]
004015BF   add         edx,dword ptr [ebp-4]
004015C2   mov         al,byte ptr [edx]
004015C4   push        eax
004015C5   push        offset std::cout (004777e0)
004015CA   call        @ILT+445(std::operator<<) (004011c2)
004015CF   add         esp,8
10:           n = n + 1;
004015D2   mov         ecx,dword ptr [ebp-4]
004015D5   add         ecx,1
004015D8   mov         dword ptr [ebp-4],ecx
11:       }
004015DB   jmp         fun1+1Fh (004015af)
12:       return n;
004015DD   mov         eax,dword ptr [ebp-4]
13:   }
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
15:   int fun2(char * str)
16:   {
00401610   push        ebp
00401611   mov         ebp,esp
00401613   sub         esp,44h
00401616   push        ebx
00401617   push        esi
00401618   push        edi
00401619   lea         edi,[ebp-44h]
0040161C   mov         ecx,11h
00401621   mov         eax,0CCCCCCCCh
00401626   rep stos    dword ptr [edi]
17:       int n = 0;
00401628   mov         dword ptr [ebp-4],0
18:       while(str[n])
0040162F   mov         eax,dword ptr [ebp+8]
00401632   add         eax,dword ptr [ebp-4]
00401635   movsx       ecx,byte ptr [eax]
00401638   test        ecx,ecx
0040163A   je          fun2+4Dh (0040165d)
19:       {
20:           cout<<str[n];
0040163C   mov         edx,dword ptr [ebp+8]
0040163F   add         edx,dword ptr [ebp-4]
00401642   mov         al,byte ptr [edx]
00401644   push        eax
00401645   push        offset std::cout (004777e0)
0040164A   call        @ILT+445(std::operator<<) (004011c2)
0040164F   add         esp,8
21:           n = n + 1;
00401652   mov         ecx,dword ptr [ebp-4]
00401655   add         ecx,1
00401658   mov         dword ptr [ebp-4],ecx
22:       }
0040165B   jmp         fun2+1Fh (0040162f)
23:       return n;
0040165D   mov         eax,dword ptr [ebp-4]
24:   }
Индексация разная - асм один и тотже. Резюме: Оба варианта индексации идентичны в плане быстродействия, т.к. идентичны асмы для какждого варинта индексации.
 
Текущее время: 21:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru