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

Битовые утечки при записи данных на диск - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Builtin функции http://www.cyberforum.ru/cpp/thread1755256.html
Погружение в сабж. Компилятор gcc. Имеет ли смысл вообще их изучать, какие из них действительно надо знать, ибо полезные? И вообще, как можно относиться к их использованию в коде?
C++ Ищу исходники для игры pinball Всем Доброго времени суток ! Есть-ли у кого нибуть исходники для игры pinball (желательно с комментариями) ? Буду очень благодарен если кто-то скинет ! Добавлено через 33 секунды заранее благодарен ! http://www.cyberforum.ru/cpp/thread1754811.html
C++ Опрос про чувствительность к регистру
Языки программирования бывают чувствительные (думаю, большинство) и нечувствительные к регистру букв. Для кого-то удобны вторые языки, кто-то со строгим подходом считает, что первые - это канон, а нечувствительность к регистру переменных/функций развращает мозг прогера. Хотелось бы услышать мнения пользователей CyberForum-а о том, чем хороша/плоха чувствительность/нечувствительность к регистру...
C++ Как запустить проект, используя компилятор LLVM?
Собрал под виндой LLVM. Все вроде нормально. либы есть,хидеры есть, бинари есть. Надо, думаю,попробовать с llvm'овскими либами что-нибудь собрать. полез в инет,все сделал по инструкции. Но в настройках проекта нет ни нужных либ, ни нужных хидеров... печаль. Структура каталогов такова: D:\llvm-3.4 - сорцы ллвм, D:\llvm-build - уже собраное все. Выставил переменную среды...
C++ Найти всевозможные комбинации паролей и сохранить их в блокнот http://www.cyberforum.ru/cpp/thread1753001.html
Нужна помощь, дело такое, поставил на пароль архив, пароль забыл. Но, помню , что пароль состоял из двух основных паролей ( а их всего от 4 до 6, в зависимости от конечных цифр). Методом грубого перебора постоянно сбиваюсь какие пароли уже вводил и тд. Хочу попробовать перебор по словарю, для этого нужно найти всевозможные комбинации паролей и чтоб они сохранились в блокнот.
C++ Умножить две квадратные матрицы, используя ассемблерные вставки Зравствуйте! Требуется написать программу умножения двух квадратных матриц используя ассемблерные вставки и сравнить с обычным умножением в C++ (то есть: a * b). Я написал такой код: #include <iostream> #include <ctime> void multiply(int *a, int *b, int *c, int n) { _asm { MOV EDI, a MOV ESI, b подробнее

Показать сообщение отдельно
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
11.06.2016, 11:47  [ТС]     Битовые утечки при записи данных на диск
Обнаружил неприятное, но сильно понятнее не стало.
"Бесконечный" код для теста был:
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <fstream>
#include <conio.h>
 
using namespace std;
 
 
int main()
{
    int n = 1<<30;
    int k = 3<<24;
    unsigned long long c = 0;
    char o;
    bool te = true;
    int a = 0;
    ofstream flog;
    flog.open("Test.log",ios_base::app);
    unsigned long long * b = new unsigned long long[n];
    cout << hex << "Array at addres (" << b << "). " << dec << endl;
    flog << hex << "Array at addres (" << b << "). " << dec << endl;
    while (te)
    {
        for (int i = 0; i < n; i++)     //Asc tab
            b[i]=k+i;
        cout << "Table asc ready. Read:" << hex;
        flog << "Table asc ready. Read:" << hex;
        for (int m = 0; m < 8; m++)
        {
            cout << m;
            flog << m;
            c = k;
            for (int i = 0; i < n; i++,c++)
                if (b[i] != c)
                {
                    cout << endl << "Error at adr(" << (b+i) <<"). Value: " << b[i] << " must be: " << c << endl;
                    flog << endl << "Error at adr(" << (b+i) <<"). Value: " << b[i] << " must be: " << c << endl;
                }
            if (_kbhit())
            {
                o = _getch();
                if (o == 27)
                {
                    cout << " Exit ? ";
                    o = _getche();
                    cout << endl;
                    if (o == 'y' || o == 'Y')
                        te = false;
                }
            }
        }
        cout << endl;
        flog << endl;
 
        for (int i = 0; i < n; i++)     //Clr tab
            b[i]=0;
        cout << "Table clear ready. Read:" << hex;
        flog << "Table clear ready. Read:" << hex;
        for (int m = 0; m < 8; m++)
        {
            cout << m;
            flog << m;
            for (int i = 0; i < n; i++)
                if (b[i] != 0)
                {
                    cout << endl << "Error at adr(" << (b+i) <<"). Value: " << b[i] << " must be: 0" << endl;
                    flog << endl << "Error at adr(" << (b+i) <<"). Value: " << b[i] << " must be: 0" << endl;
                }
            if (_kbhit())
            {
                o = _getch();
                if (o == 27)
                {
                    cout << " Exit ? ";
                    o = _getche();
                    cout << endl;
                    if (o == 'y' || o == 'Y')
                        te = false;
                }
            }
        }
        cout << endl;
        flog << endl;
 
        for (int i = 0; i < n; i++)
            b[i]=0xffffffffffffffff;
        cout << "Table bit ready. Read:" << hex;
        flog << "Table bit ready. Read:" << hex;
        for (int m = 0; m < 8; m++)
        {
            cout << m;
            flog << m;
            c = 0xffffffffffffffff;
            for (int i = 0; i < n; i++)
                if (b[i] != c)
                {
                    cout << endl << "Error at adr(" << (b+i) <<"). Value: " << b[i] << " must be: " << c << endl;
                    flog << endl << "Error at adr(" << (b+i) <<"). Value: " << b[i] << " must be: " << c << endl;
                }
            if (_kbhit())
            {
                o = _getch();
                if (o == 27)
                {
                    cout << " Exit ? ";
                    o = _getche();
                    cout << endl;
                    if (o == 'y' || o == 'Y')
                        te = false;
                }
            }
        }
        cout << endl;
        flog << endl;
    }
    flog.close();
    cin.get();
return 0;
}
Код
Заполнение массива восходящими значениями от определенной величины.
Проверка массива на соответствие заполненному (8-16 раз).
Очистка массивы нулями.
Проверка все ли нули (8-16 раз).
Заполнение массива всеми заполненными битами.
Проверка всех бит на наличие заполнения (8-16 раз).
и все по новой...
Выход по Esc затем y.
Лог пишется параллельно в файл.
Обнаружил что если при запуске ошибка возникла в памяти, то она есть уже при всех считываниях (разумеется). Но при этом заполнение этого же массива нулями не показывает наличие сбоя в памяти при заполнении. Так же ведет себя заполнение единицами. Но при втором круге - заполнение восходящими значениями, опять возникает ошибка там же либо в другой ячейке. И так все время.
Если же с самого начала тест на возрастающих значениях ошибок не показал, то он его не покажет и через несколько часов.
Т.е. есть закономерность при запуске. Теоретически действительно может быть одно из ядер процессора. Только как узнать какое именно? (кол-во я получить могу, но вот номер...)
И опять же не без НО. Но почему при заполнении нулями и единицами сбоев нет совсем. Должны быть если это проц.
В приложенном файле логи ошибочных и удачных запусков.
В первом - кол-во проходов 16 для int k = 1<<24;
Во втором проходов 8 для int k = 3<<24;
Evg 4 версия мемтеста уже работает с памятью каждым ядром процессора по отдельности (параллельно и последовательно). Т.е. получается, что в данном случае сбой не в памяти, а возможно, в процессоре или в софте при расчете. Тогда почему при том же расчете при проверке, не происходит сбоя в том же самом ядре? Мой результат теста показал, что если ошибка появилась, то она уже есть все время в пределах текущего запуска и массива.
vxg можешь попробовать этот код запустить? Или может мой готовый exe файл дать? (На случай если у меня C++ погнал)
Вложения
Тип файла: zip Logs.zip (1.5 Кб, 2 просмотров)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru