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

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.87
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
#1

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

06.06.2016, 14:42. Просмотров 3237. Ответов 119
Метки нет (Все метки)

Доброго дня форумчане!
Сорри если оффтоп но... Пишу в консольке на C++ (MSVCE 2010) различные движки по расчетам и тут столкнулся с опасной проблемой.
При записи на диск искажаются данные на один бит, где то один раз на 109 - 1011 данных. Бит просто "теряется" (был 1 стал 0 или наоборот) , соответственно данные уже не верны, что приводит к нулю все проделанную работу.
Из исследованного:
Бит теряется при записи как в поток текстового значения переменных (типа fileout << a[i] << endl;)
Так и при записи в двоичном виде (типа fileout.write(reinterpret_cast<char*>(a),size*sizeof(a[0]));)
Замечено, что данные в памяти верные, т.к. были пойманы моменты при повторном выводе из того же массива все данные были записаны корректно.
Ошибка не зависит от винчестера на который данные были записаны (были записи на 3 различных винта, один из которых рейд массив).
Чаще всего теряется один из старших битов (типа 24-й бит в unsigned long или 24-й в unsigned long long). Других потерянных бит не замечено.
Термин "потерянный" возможно применяю в данном случае не верно. Т.к. заметно искажение только при его инвертировании. Соответственно если был сбой и он вместо 1 записал сбойную 1 - этого я не найду.
Система молчит про контроль целостности данных. Винт тоже. У винтов и рейда все показатели в порядке (блоки не сыпятся, SMART в порядке).

Сталкивался ли кто с подобным? В чем может быть проблема?

В ближайшем будущем хочу переустановить систему и MSVCE 2013. Но не уверен, что система виновата.
Кто что подскажет?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2016, 14:42     Битовые утечки при записи данных на диск
Посмотрите здесь:
Утечки при использовании порта завершения и соккетов C++
C++ Builder Избежать утечки памяти при преобразовании строки в массив символов
C++ Утечки памяти при использовании new/delete для двумерных массивов
Битовые операции с разными типа данных C++
Битовые операции, битовые поля. C++
C++ Ошибка при записи данных в файл
Ошибка при записи в файл данных из обьекта класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
15.06.2016, 16:59     Битовые утечки при записи данных на диск #101
Вот что выдал gcc 4.9.3 с -O2:
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
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
    .file   "main.cpp"
    .intel_syntax noprefix
# GNU C++ (Gentoo 4.9.3 p1.5, pie-0.6.4) version 4.9.3 (x86_64-pc-linux-gnu)
#   compiled by GNU C version 4.9.3, GMP version 6.0.0, MPFR version 3.1.3-p4, MPC version 1.0.2
# GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
# options passed:  -D_GNU_SOURCE main.cpp -masm=intel -mtune=generic
# -march=x86-64 -O2 -fverbose-asm -fstack-protector-strong
# options enabled:  -faggressive-loop-optimizations
# -fasynchronous-unwind-tables -fauto-inc-dec -fbranch-count-reg
# -fcaller-saves -fcombine-stack-adjustments -fcommon -fcompare-elim
# -fcprop-registers -fcrossjumping -fcse-follow-jumps -fdefer-pop
# -fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
# -fdwarf2-cfi-asm -fearly-inlining -feliminate-unused-debug-types
# -fexceptions -fexpensive-optimizations -fforward-propagate -ffunction-cse
# -fgcse -fgcse-lm -fgnu-runtime -fgnu-unique -fguess-branch-probability
# -fhoist-adjacent-loads -fident -fif-conversion -fif-conversion2
# -findirect-inlining -finline -finline-atomics
# -finline-functions-called-once -finline-small-functions -fipa-cp
# -fipa-profile -fipa-pure-const -fipa-reference -fipa-sra
# -fira-hoist-pressure -fira-share-save-slots -fira-share-spill-slots
# -fisolate-erroneous-paths-dereference -fivopts -fkeep-static-consts
# -fleading-underscore -flifetime-dse -fmath-errno -fmerge-constants
# -fmerge-debug-strings -fmove-loop-invariants -fomit-frame-pointer
# -foptimize-sibling-calls -foptimize-strlen -fpartial-inlining -fpeephole
# -fpeephole2 -fprefetch-loop-arrays -free -freg-struct-return
# -freorder-blocks -freorder-blocks-and-partition -freorder-functions
# -frerun-cse-after-loop -fsched-critical-path-heuristic
# -fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock
# -fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec
# -fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fschedule-insns2
# -fshow-column -fshrink-wrap -fsigned-zeros -fsplit-ivs-in-unroller
# -fsplit-wide-types -fstack-protector-strong -fstrict-aliasing
# -fstrict-overflow -fstrict-volatile-bitfields -fsync-libcalls
# -fthread-jumps -ftoplevel-reorder -ftrapping-math -ftree-bit-ccp
# -ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-coalesce-vars
# -ftree-copy-prop -ftree-copyrename -ftree-cselim -ftree-dce
# -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre
# -ftree-loop-if-convert -ftree-loop-im -ftree-loop-ivcanon
# -ftree-loop-optimize -ftree-parallelize-loops= -ftree-phiprop -ftree-pre
# -ftree-pta -ftree-reassoc -ftree-scev-cprop -ftree-sink -ftree-slsr
# -ftree-sra -ftree-switch-conversion -ftree-tail-merge -ftree-ter
# -ftree-vrp -funit-at-a-time -funwind-tables -fverbose-asm
# -fzero-initialized-in-bss -m128bit-long-double -m64 -m80387
# -malign-stringops -mavx256-split-unaligned-load
# -mavx256-split-unaligned-store -mfancy-math-387 -mfp-ret-in-387 -mfxsr
# -mglibc -mieee-fp -mlong-double-80 -mmmx -mno-sse4 -mpush-args -mred-zone
# -msse -msse2 -mtls-direct-seg-refs -mvzeroupper
 
    .section    .rodata.str1.1,"aMS",@progbits,1
.LC0:
    .string "Table asc ready. Read:"
.LC1:
    .string "%d"
    .section    .rodata.str1.8,"aMS",@progbits,1
    .align 8
.LC2:
    .string "\nError at adr(%X). Value: %X must be: %X\n"
    .section    .rodata.str1.1
.LC3:
    .string "Table clear ready. Read:"
    .section    .rodata.str1.8
    .align 8
.LC4:
    .string "\nError at adr(%X). Value: %X must be: 0\n"
    .section    .rodata.str1.1
.LC5:
    .string "Table bit ready. Read:"
.LC6:
    .string "Table asc2 ready. Read:"
.LC7:
    .string "Array at addres (%X). \n"
    .section    .text.unlikely,"ax",@progbits
.LCOLDB8:
    .section    .text.startup,"ax",@progbits
.LHOTB8:
    .p2align 4,,15
    .globl  main
    .type   main, @function
main:
.LFB45:
    .cfi_startproc
    push    r13 #
    .cfi_def_cfa_offset 16
    .cfi_offset 13, -16
    push    r12 #
    .cfi_def_cfa_offset 24
    .cfi_offset 12, -24
    push    rbp #
    .cfi_def_cfa_offset 32
    .cfi_offset 6, -32
    push    rbx #
    .cfi_def_cfa_offset 40
    .cfi_offset 3, -40
    sub rsp, 8  #,
    .cfi_def_cfa_offset 48
.L2:
    movabs  rdi, 8589934592 #,
    call    malloc  #
    mov esi, OFFSET FLAT:.LC7   #,
    mov rdx, rax    #, b
    mov r12, rax    # b,
    mov edi, 1  #,
    xor eax, eax    #
    call    __printf_chk    #
    mov eax, 50331648   # ivtmp.97,
    .p2align 4,,10
    .p2align 3
.L3:
    mov QWORD PTR [r12-402653184+rax*8], rax    # MEM[base: b_35, index: ivtmp.97_2, step: 8, offset: -402653184B], ivtmp.97
    add rax, 1  # ivtmp.97,
    cmp rax, 1124073472 # ivtmp.97,
    jne .L3 #,
    mov esi, OFFSET FLAT:.LC0   #,
    mov edi, 1  #,
    xor eax, eax    #
    xor r13d, r13d  # m
    call    __printf_chk    #
.L6:
    mov edx, r13d   #, m
    mov esi, OFFSET FLAT:.LC1   #,
    mov edi, 1  #,
    xor eax, eax    #
    mov rbp, r12    # ivtmp.83, b
    mov ebx, 50331648   # c,
    call    __printf_chk    #
    .p2align 4,,10
    .p2align 3
.L5:
    mov rcx, QWORD PTR [rbp+0]  # D.3998, MEM[base: _45, offset: 0B]
    cmp rcx, rbx    # D.3998, c
    je  .L4 #,
    mov r8, rbx #, c
    mov rdx, rbp    #, ivtmp.83
    mov esi, OFFSET FLAT:.LC2   #,
    mov edi, 1  #,
    xor eax, eax    #
    call    __printf_chk    #
.L4:
    add rbx, 1  # c,
    add rbp, 8  # ivtmp.83,
    cmp rbx, 1124073472 # c,
    jne .L5 #,
    cmp r13d, 1 # m,
    jne .L19    #,
    mov edi, 10 #,
    movabs  rbp, 8589934592 # tmp172,
    call    putchar #
    add rbp, r12    # D.4000, b
    mov rax, r12    # ivtmp.73, b
    .p2align 4,,10
    .p2align 3
.L7:
    mov QWORD PTR [rax], 0  # MEM[base: _55, offset: 0B],
    add rax, 8  # ivtmp.73,
    cmp rax, rbp    # ivtmp.73, D.4000
    jne .L7 #,
    mov esi, OFFSET FLAT:.LC3   #,
    mov edi, 1  #,
    xor eax, eax    #
    xor r13d, r13d  # m
    call    __printf_chk    #
.L10:
    mov edx, r13d   #, m
    mov esi, OFFSET FLAT:.LC1   #,
    mov edi, 1  #,
    xor eax, eax    #
    mov rbx, r12    # ivtmp.59, b
    call    __printf_chk    #
    jmp .L9 #
    .p2align 4,,10
    .p2align 3
.L8:
    add rbx, 8  # ivtmp.59,
    cmp rbp, rbx    # D.4000, ivtmp.59
    je  .L39    #,
.L9:
    mov rcx, QWORD PTR [rbx]    # D.3998, MEM[base: _57, offset: 0B]
    test    rcx, rcx    # D.3998
    je  .L8 #,
    mov rdx, rbx    #, ivtmp.59
    xor eax, eax    #
    mov esi, OFFSET FLAT:.LC4   #,
    mov edi, 1  #,
    add rbx, 8  # ivtmp.59,
    call    __printf_chk    #
    cmp rbp, rbx    # D.4000, ivtmp.59
    jne .L9 #,
.L39:
    cmp r13d, 1 # m,
    jne .L20    #,
    mov edi, 10 #,
    call    putchar #
    mov rax, r12    # ivtmp.51, b
    .p2align 4,,10
    .p2align 3
.L11:
    mov QWORD PTR [rax], -1 # MEM[base: _66, offset: 0B],
    add rax, 8  # ivtmp.51,
    cmp rax, rbp    # ivtmp.51, D.4000
    jne .L11    #,
    mov esi, OFFSET FLAT:.LC5   #,
    mov edi, 1  #,
    xor eax, eax    #
    xor r13d, r13d  # m
    call    __printf_chk    #
.L14:
    mov edx, r13d   #, m
    mov esi, OFFSET FLAT:.LC1   #,
    mov edi, 1  #,
    xor eax, eax    #
    mov rbx, r12    # ivtmp.37, b
    call    __printf_chk    #
    .p2align 4,,10
    .p2align 3
.L13:
    mov rcx, QWORD PTR [rbx]    # D.3998, MEM[base: _68, offset: 0B]
    cmp rcx, -1 # D.3998,
    je  .L12    #,
    mov r8, -1  #,
    mov rdx, rbx    #, ivtmp.37
    mov esi, OFFSET FLAT:.LC2   #,
    mov edi, 1  #,
    xor eax, eax    #
    call    __printf_chk    #
.L12:
    add rbx, 8  # ivtmp.37,
    cmp rbp, rbx    # D.4000, ivtmp.37
    jne .L13    #,
    cmp r13d, 1 # m,
    jne .L21    #,
    mov edi, 10 #,
    call    putchar #
    mov eax, 50331648   # c,
    .p2align 4,,10
    .p2align 3
.L15:
    mov QWORD PTR [r12-402653184+rax*8], rax    # MEM[base: b_35, index: c_131, step: 8, offset: -402653184B], c
    add rax, 1  # c,
    cmp rax, 1124073472 # c,
    jne .L15    #,
    mov esi, OFFSET FLAT:.LC6   #,
    mov edi, 1  #,
    xor eax, eax    #
    xor r13d, r13d  # m
    call    __printf_chk    #
.L18:
    mov edx, r13d   #, m
    mov esi, OFFSET FLAT:.LC1   #,
    mov edi, 1  #,
    xor eax, eax    #
    mov rbp, r12    # ivtmp.12, b
    mov ebx, 50331648   # c,
    call    __printf_chk    #
    .p2align 4,,10
    .p2align 3
.L17:
    mov rcx, QWORD PTR [rbp+0]  # D.3998, MEM[base: _80, offset: 0B]
    cmp rcx, rbx    # D.3998, c
    je  .L16    #,
    mov r8, rbx #, c
    mov rdx, rbp    #, ivtmp.12
    mov esi, OFFSET FLAT:.LC2   #,
    mov edi, 1  #,
    xor eax, eax    #
    call    __printf_chk    #
.L16:
    add rbx, 1  # c,
    add rbp, 8  # ivtmp.12,
    cmp rbx, 1124073472 # c,
    jne .L17    #,
    cmp r13d, 1 # m,
    jne .L22    #,
    mov edi, 10 #,
    call    putchar #
    mov rdi, r12    #, b
    call    free    #
    jmp .L2 #
.L21:
    mov r13d, 1 # m,
    jmp .L14    #
.L22:
    mov r13d, 1 # m,
    jmp .L18    #
.L20:
    mov r13d, 1 # m,
    jmp .L10    #
.L19:
    mov r13d, 1 # m,
    jmp .L6 #
    .cfi_endproc
.LFE45:
    .size   main, .-main
    .section    .text.unlikely
.LCOLDE8:
    .section    .text.startup
.LHOTE8:
    .ident  "GCC: (Gentoo 4.9.3 p1.5, pie-0.6.4) 4.9.3"
    .section    .note.GNU-stack,"",@progbits
Добавлено через 4 минуты
Вот внутренняя часть цикла msvc:
Assembler
1
2
3
4
5
6
7
8
9
10
$LL40@main:
 
; 19   :            b[i]=k+i;
 
movsxd   rcx, eax
inc  rdx
inc  eax
mov  QWORD PTR [rbp+rdx*8-8], rcx
cmp  rdx, 1073741824        ; 40000000H
jl   SHORT $LL40@main
А вот gcc:
Assembler
1
2
3
4
5
.L3:
    mov QWORD PTR [r12-402653184+rax*8], rax    # MEM[base: b_35, index: ivtmp.97_2, step: 8, offset: -402653184B], ivtmp.97
    add rax, 1  # ivtmp.97,
    cmp rax, 1124073472 # ivtmp.97,
    jne .L3 #,
Код достаточно разный.
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
15.06.2016, 17:26  [ТС]     Битовые утечки при записи данных на диск #102
Цитата Сообщение от vxg Посмотреть сообщение
немигая смотреть на черный экран? зашбсь
Последствия "облегчения".
Командная строка с офигенским количеством строк...
За полтора часа в 2 гиговом тесте не обнаружено никаких ошибок. :/
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 26
15.06.2016, 18:18     Битовые утечки при записи данных на диск #103
Цитата Сообщение от vxg Посмотреть сообщение
Petrolion, интересно как вы думаете ловить ошибку при долгом тесте если код не останавливается при ее определении а пашет дальше с отключенным логом в файл?
В случае ошибки же печать срабатывает
vxg
Модератор
3138 / 1940 / 214
Регистрация: 13.01.2012
Сообщений: 7,428
15.06.2016, 18:27     Битовые утечки при записи данных на диск #104
Evg, и как я завтра об этом узнаю спустя сто строк?
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 26
15.06.2016, 18:34     Битовые утечки при записи данных на диск #105
А... там ещё и левые печати... Ну тогда для порядку исходник поправить так, чтоб работал до первой ошибки. Ведь важно выяснить факт, есть ошибка, или нет. А сколько раз - уже не так важно
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
15.06.2016, 18:43  [ТС]     Битовые утечки при записи данных на диск #106
vxg, в приаттаченном файле старый вариант с логом для 2 гиг.
У меня на 8 гиг один полный цикл выполняется соответственно в 4 раза дольше и записей в логах получается меньше.
Все же не могли бы вы скомпилить для меня в вашем компиляторе пример на 8 гиг. Сколько двушки не гоняю - не ловится ошибка.
Вложения
Тип файла: zip proba_exe.zip (11.6 Кб, 0 просмотров)
vxg
Модератор
3138 / 1940 / 214
Регистрация: 13.01.2012
Сообщений: 7,428
15.06.2016, 18:56     Битовые утечки при записи данных на диск #107
Petrolion, завтра утром так как с таким насилием над жестким боюсь оставлять на ночь

Добавлено через 1 минуту
Petrolion, сделали бы уже задание размера или несколько сборок - может на моей сборке не будет ошибки по др причинам
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
15.06.2016, 20:05  [ТС]     Битовые утечки при записи данных на диск #108
vxg, Можно указывать n через cin >> n;.
Хотел сделать забор всей доступной памяти (с небольшим резервом), но винда сильно фрагментирует память. Не всегда запускается такой код.
vxg
Модератор
3138 / 1940 / 214
Регистрация: 13.01.2012
Сообщений: 7,428
15.06.2016, 20:43     Битовые утечки при записи данных на диск #109
Petrolion, этого в коде нет а как это сделать 101 способом я и так знаю . Замечание о фрагментации спорно
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 26
15.06.2016, 20:56     Битовые утечки при записи данных на диск #110
Количество памяти можно задать в виде отдельной глобальной переменной, так её проще будет исправлять в ассемблерном коде. Но когда количество итераций в цикле не является константой, то компилятор может построить немного другой код. Видя константу, компилятор понимает, что она большая и может построить цикл по другому, чем в варианте, когда количество итераций неизвестно. Маловероятно, что для x86-64 такое есть, но на всякий случай в таких вариантах надо глазами на ассемблерный код посмотреть, чтобы убедиться, что тело цикла осталось более-менее таким же
Renji
1853 / 1271 / 290
Регистрация: 05.06.2014
Сообщений: 3,627
15.06.2016, 22:52     Битовые утечки при записи данных на диск #111
Цитата Сообщение от Petrolion Посмотреть сообщение
Начал собирать вещички... (инфу которую нужно перенести в новую систему).
При переносе учтите что инсталятор лайва не дружит с EFI (разработчики обещают поправить, но воз и ныне там). Так что если у вас EFI, для установки Дебиана на диск нужно брать именно инсталяционный образ, а не лайв.
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
04.08.2016, 21:58  [ТС]     Битовые утечки при записи данных на диск #112
Доброго времени суток форумчане!
Свой топик не забыл и отчитываюсь как и обещал.
Нашел образ своей системы годовалой давности.

Не по теме:

(К сожалению первичный образ "новой" системы помер вместе с полуторатерабайтным винтом)

Накатил, запустил тест. Результат просто ужасающий! Потери битов были в различных местах и вообще иногда по два бита в одном значении. Суммарное количество ошибок выросло раза в три!
Понял, что моя дружба с этим вариантом установки закончена.
Затем долгое время был вдали от компа (различные проблемы).
Но вот таки установил систему. Опять Windows 7 SP1 с кумулятивными обновлениями по 14 год. Дрова, софты. MS VS 2015 Community.

Не по теме:

(Никаких других обновлений из инета не ставил, только стоит то что сами софты с собой тащат. Опять куча твиков для SSD и прочие настройки.)

Запустил тест. Более суток непрерывной работы с пересадками по разным ядрам и ни одной ошибки!
Все же проблема оказалась в закривленной системе Windows 7, а не в VC. Правда у меня в голове ни как не укладывается как можно "терять" биты в одном значении... и что для этого "специально" нужно делать.

Оставил половину SSD под Debian (хочу первой системой его) и два раздела на HDD для него. Альтернатива никогда не будет лишней.
Всем участвующим в моей проблеме - огромное спасибо! Вы подошли к исследованиям как настоящие профессионалы! Надеюсь мой горький опыт когда-нибудь и вам пригодится (не дай Гейтс!).
Удачи всем!
Fulcrum_013
663 / 731 / 72
Регистрация: 14.12.2014
Сообщений: 5,699
Завершенные тесты: 3
04.08.2016, 22:10     Битовые утечки при записи данных на диск #113
Цитата Сообщение от Petrolion Посмотреть сообщение
fbin.write(reinterpret_cast<char*>(b),n*sizeof(b[0]));
char он вообще от signed отсода и проблемы а темболее с реинтерпритом.
На С++ это писать надо а на непонятно чем. а на С++ будет вот так:
C++
1
fbin.write((void *)b,n*sizeof(b[0]));
и читать соответственно так же.
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
04.08.2016, 23:37  [ТС]     Битовые утечки при записи данных на диск #114
Fulcrum_013, Извините, но вы немного не в тему. Чуть дальше прочитайте. Проблемы были не оттуда.
Проблемы были в памяти, а не при записи.
А реинтерпрет я пользовал часто и густо (возможно к своему стыду), никогда проблем не возникало.
Fulcrum_013
663 / 731 / 72
Регистрация: 14.12.2014
Сообщений: 5,699
Завершенные тесты: 3
04.08.2016, 23:41     Битовые утечки при записи данных на диск #115
Цитата Сообщение от Petrolion Посмотреть сообщение
реинтерпрет я пользовал часто и густо (возможно к своему стыду), никогда проблем не возникало
Просто некоторым функциям тип данных знать не нужно, а только размер. Поэтому и отдавать им надо void*.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
05.08.2016, 01:08     Битовые утечки при записи данных на диск #116
Fulcrum_013, а ничего что функция std::ostream::write имеет прототип
C++
1
ostream& write (const char* s, streamsize n);
?
Fulcrum_013
663 / 731 / 72
Регистрация: 14.12.2014
Сообщений: 5,699
Завершенные тесты: 3
05.08.2016, 01:31     Битовые утечки при записи данных на диск #117
Цитата Сообщение от Toshkarik Посмотреть сообщение
а ничего что функция std::ostream::write имеет прототип
В бинарный файл? всегда говорил в топку STD
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 26
05.08.2016, 19:31     Битовые утечки при записи данных на диск #118
Цитата Сообщение от Petrolion Посмотреть сообщение
Все же проблема оказалась в закривленной системе Windows 7, а не в VC. Правда у меня в голове ни как не укладывается как можно "терять" биты в одном значении... и что для этого "специально" нужно делать
Когда происходит обращение к памяти по валидному, но неподкачанному в физпамять адресу, случается прерывание и информаци о непрошедшем обращении в память складывается в специальный "подвал". Далее операционная система извлекает оттуда информацию и переисполняет. Наличие аппаратной ошибки в процессоре в принципе может привести к тому, что на разных ОС исходная ошибка проявляется по разному (или не проявляется). За счёт того, что постоянно работает скрытый от пользователя код по обработке подвала
Petrolion
24 / 24 / 7
Регистрация: 02.02.2016
Сообщений: 124
06.08.2016, 01:25  [ТС]     Битовые утечки при записи данных на диск #119
Цитата Сообщение от Evg Посмотреть сообщение
Когда происходит обращение к памяти по валидному, но неподкачанному в физпамять адресу, случается прерывание и информаци о непрошедшем обращении в память складывается в специальный "подвал". Далее операционная система извлекает оттуда информацию и переисполняет. Наличие аппаратной ошибки в процессоре в принципе может привести к тому, что на разных ОС исходная ошибка проявляется по разному (или не проявляется). За счёт того, что постоянно работает скрытый от пользователя код по обработке подвала
Вы имеете ввиду кэш? Потому как проблему с файлом подкачки отмел сразу. Отключением оного.
Инсталляция исходной винды немного другая (на пару лет свежее), но откат на систему годовалой давности показал ее полное фиаско.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.08.2016, 21:59     Битовые утечки при записи данных на диск
Еще ссылки по теме:
Как заставить ресурс работать без записи на диск? C++ Builder
C++ Напишите функции записи данных в файл, чтения данных из файла
C++ Builder Составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих данных в файл
Утечки памяти C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17530 / 5768 / 368
Регистрация: 30.03.2009
Сообщений: 15,865
Записей в блоге: 26
07.08.2016, 21:59     Битовые утечки при записи данных на диск #120
Нет, это специальный буфер, предназначенный для доисполнения в ОС сломавшихся операций обращения в память

Добавлено через 59 секунд
Хотя может на интеле его и нет...

Добавлено через 3 минуты
Да, что-то меня понесло, в интеле его нет

Правда теперь нет нормальных идей о том, как ОС в твоём случае могла повлиять на отдельные биты. Разве что опять код ядра создавал специфичный контекст для возникновения аппаратной ошибки
Yandex
Объявления
07.08.2016, 21:59     Битовые утечки при записи данных на диск
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru