|
|
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
фрагмент... Код: plaintext 1. 2. 3. 4. ...конец фрагмента ф-ия GetAnyText() возвращает текст длиной не более 127 символов, стоит ли потом (как показано в фрагементе) убирать все что больше длины полученной строки при помощи realloc()? сильно ли это сказывается на производительности, если используется очень плотно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:16 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
или даже лучше так: Код: plaintext 1. 2. 3. 4. ...конец фрагмента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:18 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
опять накосячил): Код: plaintext 1. 2. 3. 4. ...конец фрагмента ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:21 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
Думаю, при такой постановке нет смысла. Если будет много строк, то смысл будет (ограничение памяти), но лучше будет рассмотреть другие варианты, например создание строк через буфер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:34 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
AkhДумаю, при такой постановке нет смысла. Если будет много строк, то смысл будет (ограничение памяти), но лучше будет рассмотреть другие варианты, например создание строк через буфер. Как через буфер? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 14:40 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
Tubrik AkhДумаю, при такой постановке нет смысла. Если будет много строк, то смысл будет (ограничение памяти), но лучше будет рассмотреть другие варианты, например создание строк через буфер. Как через буфер? Получаешь в постоянный буфер. Считаешь длину, делаешь malloc. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 15:31 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
ф-ия GetAnyText() возвращает текст длиной не более 127 символов, стоит ли потом (как показано в фрагементе) убирать все что больше длины полученной строки при помощи realloc()? Если не нужно очень сильно экономить память, то не нужно. Если заботится о производительности - точно не нужно. сильно ли это сказывается на производительности, если используется очень плотно? Да, безусловно сильно. Выделение памяти - очень дорогая операция. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 20:08 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
исключительно ради интереса собственного сделал, может конечно и не слишком грамотно: код: Код: plaintext 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. время выполнения в сек. : 15, 12, 13, 12, 12, 13, 13, 13, 13, 12 код: Код: plaintext 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. время выполнения: 11, 11, 11, 11, 11, 10, 11, 11, 11, 11 код: Код: plaintext 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. время выполнения: 12, 11, 12, 12, 11, 12, 13, 11, 13, 11, 12 код: Код: plaintext 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. время: 30, 18, 15, 16. причем когда я наблюдал в диспетчере задач, размер приложения перевалив отметку примерно в 400 000 кб. сбрасывался и остчет снова начинался с нуля КАК ОБЪЯСНИТЬ СЕЙ ФАКТ?? единственная догадка, что исчерпывалась доступная память, но почему проиходил сброс? что вообще происходит когда исчерпывается память? понятно что она перестает выделяться и происходит исключение, либо возвращается NULL, но как обрабатывать такие ситуации, если память всетаки должна быть выделена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2006, 23:42 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
Tubrikчто вообще происходит когда исчерпывается память? понятно что она перестает выделяться и происходит исключение, либо возвращается NULL, но как обрабатывать такие ситуации, если память всетаки должна быть выделена? Идти запосными путями, удалять что-то не нужноре, сообщать об ошибке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 09:43 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
Akh Tubrikчто вообще происходит когда исчерпывается память? понятно что она перестает выделяться и происходит исключение, либо возвращается NULL, но как обрабатывать такие ситуации, если память всетаки должна быть выделена? Идти запосными путями, удалять что-то не нужноре, сообщать об ошибке Когда нехватает памяти система начинает другие приложения "сгружать" на диск, тогда если в своем приложении подождать нек. время, и снова пропробовать выделить память, то может получиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 10:57 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
Tubrik Akh Tubrikчто вообще происходит когда исчерпывается память? понятно что она перестает выделяться и происходит исключение, либо возвращается NULL, но как обрабатывать такие ситуации, если память всетаки должна быть выделена? Идти запосными путями, удалять что-то не нужноре, сообщать об ошибке Когда нехватает памяти система начинает другие приложения "сгружать" на диск, тогда если в своем приложении подождать нек. время, и снова пропробовать выделить память, то может получиться? Может получиться. Она, впринципе, и часть твоего может сгрузить на диск. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 11:01 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
КАК ОБЪЯСНИТЬ СЕЙ ФАКТ?? Ой, лениво мне это ковырять.. что вообще происходит когда исчерпывается память? понятно что она перестает выделяться и происходит исключение, либо возвращается NULL, Именно возвращается NULL. В C нет исключений. но как обрабатывать такие ситуации, если память всетаки должна быть выделена? Никак. Завершать приложение. Или в цикле пытаться выделять память и если неудачно выдавать сообщение что памяти нет, надо закрыть пару-тройку приложений.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 13:17 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
MasterZivНикак. Завершать приложение. Или в цикле пытаться выделять память и если неудачно выдавать сообщение что памяти нет, надо закрыть пару-тройку приложений.... Довольно не интеллектуальный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 13:18 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
AkhДовольно не интеллектуальный алгоритм.перезагрузиться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 16:02 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
если у приложения неограничен WorkingSet, свин начнёт увеличивать файл подкачки и лучше вам на это не смотреть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2006, 16:03 |
|
||
|
про realloc()..
|
|||
|---|---|---|---|
|
#18+
Работаю со строками переменной длины с помощью функции (простейший вариант) char* strcatex(char* dst,const char *src) { char* tmp =(char*)calloc(strlen(dst)+strlen(src)+1,sizeof(char)); char* q=tmp; const char* p=dst; while(*p!=0){*q++=*p++;} p=src; while(*p!=0){*q++=*p++;} free(dst); // Не забыть ! return tmp; } Перед первым использованием выделяем память const int N= сколькоНужноДляНачала; char* s =(char*)calloc(N,sizeof(char)); затем s=strcatex(s,"Нечто"); после последнего вызова чистим free(s); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.12.2006, 12:38 |
|
||
|
|

start [/forum/topic.php?fid=57&tid=2029848]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
156ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 434ms |

| 0 / 0 |
