|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Доброе утро. Продолжаю разбираться с Си. Требуется сделать двухмерный текстовый массив. В принципе он создается нормально. Но когда добавил free(massive_var[0][0]); Программа скомпилировалась нормально, но при исполнении упала: ***munmap_chunk(): invalid pointer: 0x00000000004007f9 *** ======= Backtrace: ========= ... ======= Memory map: ======== 0158c000-015af000 rw-p 00000000 00:00 0 [heap] 7fddb5fa5000-7fddb5fba000 r-xp 00000000 fd:00 585126 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 7fddb5fba000-7fddb61b9000 ---p 00015000 fd:00 585126 /usr/lib64/libgcc_s-4.8.5-20150702.so.1 ... Aborted Вот сам код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Подскажите пожалуйста как правильно освободить память у ячейки двухмерного массива? Ну и у всего массива. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:30 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Тебе точно С надо? Может С++ задействовать? Это совсем не то что ты думаешь Код: plaintext 1.
если честно я сам не готов объяснить почему это скомпилировалось, наверно потому что это Си ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:49 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ, Гуглить. Курсы по Си. Массивы ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 10:53 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Siemargl Уткъ, Гуглить. Курсы по Си. Массивы тут нашел пример, последнее сообщение https://www.cyberforum.ru/c-beginners/thread2496725.html массив объявляется так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
но непонятно это верно или нет. Может есть какой-нибудь пример как надо делать? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 11:19 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Тебе точно С надо? Может С++ задействовать? Это совсем не то что ты думаешь Код: plaintext 1.
если честно я сам не готов объяснить почему это скомпилировалось, наверно потому что это Си другие элементы всталял - работает. но раз это не то что надо, как-то по-другому придется. :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 11:20 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Siemargl Уткъ, Гуглить. Курсы по Си. Массивы тут нашел пример, последнее сообщение https://www.cyberforum.ru/c-beginners/thread2496725.html массив объявляется так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
но непонятно это верно или нет. Может есть какой-нибудь пример как надо делать? В общем, в этом примере двумерный массив, но одна мерность занимает строка, т.е. по сути это это одномерный массив из строк. Ищу дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 11:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Тебе точно С надо? Может С++ задействовать? Это совсем не то что ты думаешь Код: plaintext 1.
если честно я сам не готов объяснить почему это скомпилировалось, наверно потому что это Си Работало т.к. по первому символу как-то вся строка вытаскивалась наверное. Смотрите, это получился двухмерный массив из сиволов (не строк). Т.е. чтобы это был массив из строк надо вместо char* указать строку, наверное свой тип создать надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 11:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
сделал 3-х мерный символьный массив. Это получается 2-х мерный строковый. так работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Вывод: Код: plaintext 1. 2.
Но тут хочется strcpy поменять на calloc + присваивание (=) и в объявлении массива использовать не char а char* пока это не получилось. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 12:41 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Siemargl Уткъ, Гуглить. Курсы по Си. Массивы тут нашел пример, последнее сообщение https://www.cyberforum.ru/c-beginners/thread2496725.html массив объявляется так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
но непонятно это верно или нет. Может есть какой-нибудь пример как надо делать? Все тут верно. Только учти что это не двухмерный массив, а массив массивов, точнее массив строк, т.к. строка это массив символов. Хотя ты тоже массив массивов хочешь, двумерный массив так объявляется: Код: plaintext 1.
PS Тебе точно Си надо? Если да, то сначала теорию почитай, книжку какую-нибудь, т.к. это азы, без их знания ничего путного не напишешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 13:04 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ пропущено... тут нашел пример, последнее сообщение https://www.cyberforum.ru/c-beginners/thread2496725.html массив объявляется так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
но непонятно это верно или нет. Может есть какой-нибудь пример как надо делать? Все тут верно. Только учти что это не двухмерный массив, а массив массивов, точнее массив строк, т.к. строка это массив символов. Хотя ты тоже массив массивов хочешь, двумерный массив так объявляется: Код: plaintext 1.
PS Тебе точно Си надо? Если да, то сначала теорию почитай, книжку какую-нибудь, т.к. это азы, без их знания ничего путного не напишешь. Ритчи бегло прочел. Так не дает объявить: Код: plaintext 1.
str5.c: In function ‘main’: str5.c:11:16: error: expected ‘]’ before ‘,’ token char massive[1,3]; А вот этот вариант нормальный? 22426237 Мне там только надо сделать чтобы массив можно было вне функции main тоже использовать, для этого, как я понял надо не char а char* ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 13:28 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ str5.c: In function ‘main’: str5.c:11:16: error: expected ‘]’ before ‘,’ token char massive[1,3]; Похоже тут уже я напутал, это из C#, нет в С/С++ двумерных массивов. Есть только массивы массивов. Уткъ Ритчи бегло прочел. Очень бегло похоже. Иначе не было бы этого вопроса: Уткъ Мне там только надо сделать чтобы массив можно было вне функции main тоже использовать, для этого, как я понял надо не char а char* Читай про указатели. Очень внимательно читай, т.к. кроме С/С++ их нигде нет, а на них строится вся работа с памятью. Указатель (char*) это массив, указатель на массив указателей (char**) это массив массивов (двумерный) и т.д. Читай книжку чтобы нам сюда ее не перепечатывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 13:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Требуется сделать двухмерный текстовый массив. Здесь немножко есть терминологическая путаница и срыв шаблона. В С строки всегда повышают -мерность коллекции. Тоесть 1-мерный массив строк - это 2-мерный (зубчатый) массив chars. И так далее. Вообще если варьировать количество звездочек перед указателем то ты можешь варьировать мерность коллекции. Например Код: plaintext 1.
или Код: plaintext 1.
в функции main например второй аргумент как раз прилетает в виде такого массива. и так далее Код: plaintext 1.
аллокацию такого массива делают по-слоям. Тоесть сначала слой внешний. Потов второй. И потом строчки. Альтренатива зубчатости - это прямоугольная матрица. Но это подходит для строк фиксированного размера. Например номера телефонов. Если средняя длина телефона 7 цифр (в локальной городской сети) то для хранения 1000 телефонов тебе достаточно будет выделять 1000 * (7 + 1) символов. Или многомерная матрица с теми-же явными лимитами. Куб. Например Куб телефонных номеров по всем городам. Допустим гордов 15. Тогда надо аллоцировать 15 * 1000 * (7 + 1) символов. Для таких кубов и гипер-кубов нам нужен только один указатель. Код: plaintext 1.
Куб экономит память только для лимитированных строчек. Навигацию по кубу можно просто делать по формуле остчитывая расстояние от левого верхнего угла в символах. Для языков С/C++ существует аналогия между указателем и именем массива. Недавно на эту тему был очень жаркий спор. Не хотелось-бы углубляться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 13:58 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ Требуется сделать двухмерный текстовый массив. Здесь немножко есть терминологическая путаница и срыв шаблона. В С строки всегда повышают -мерность коллекции. Тоесть 1-мерный массив строк - это 2-мерный (зубчатый) массив chars. И так далее. Вообще если варьировать количество звездочек перед указателем то ты можешь варьировать мерность коллекции. Например Код: plaintext 1.
или Код: plaintext 1.
в функции main например второй аргумент как раз прилетает в виде такого массива. и так далее Код: plaintext 1.
аллокацию такого массива делают по-слоям. Тоесть сначала слой внешний. Потов второй. И потом строчки. Альтренатива зубчатости - это прямоугольная матрица. Но это подходит для строк фиксированного размера. Например номера телефонов. Если средняя длина телефона 7 цифр (в локальной городской сети) то для хранения 1000 телефонов тебе достаточно будет выделять 1000 * (7 + 1) символов. Или многомерная матрица с теми-же явными лимитами. Куб. Например Куб телефонных номеров по всем городам. Допустим гордов 15. Тогда надо аллоцировать 15 * 1000 * (7 + 1) символов. Для таких кубов и гипер-кубов нам нужен только один указатель. Код: plaintext 1.
Куб экономит память только для лимитированных строчек. Навигацию по кубу можно просто делать по формуле остчитывая расстояние от левого верхнего угла в символах. Для языков С/C++ существует аналогия между указателем и именем массива. Недавно на эту тему был очень жаркий спор. Не хотелось-бы углубляться. Большое спасибо! Впитываю информацию. Строки разной длинны, поэтому куб не подойдет, вариант с *** должно быть самое то, по описанию. Пробую повысить мерность вот этого массива, с которым экспериментирую: Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:16 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я понимаю что выгляжу довольно глупо с такими вопросами, но прошу потерпеть какое-то время, пока не наберу критическую массу шишек и граблей :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:18 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Это лишнее Код: plaintext 1. 2.
В примере было два выделения массива. Это одномерный, у тебя не используется. в остальном нормальный код 22426300 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:25 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Я понимаю что выгляжу довольно глупо с такими вопросами, но прошу потерпеть какое-то время, пока не наберу критическую массу шишек и граблей :-( Ты-же копируешь на линуксы и там собираешь? Тогда гоняй valgrind каждый раз при каждом запуске. Это будет лакмусовая бумажка. Как только что-то не то с утечкой или доступом по неаллоцированому - ты получишь желтую карточку. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:30 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ Я понимаю что выгляжу довольно глупо с такими вопросами, но прошу потерпеть какое-то время, пока не наберу критическую массу шишек и граблей :-( Ты-же копируешь на линуксы и там собираешь? Тогда гоняй valgrind каждый раз при каждом запуске. Это будет лакмусовая бумажка. Как только что-то не то с утечкой или доступом по неаллоцированому - ты получишь желтую карточку. Да, так и есть, копирую и там собираю. valgrind , почитаю, спасибо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:37 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Это лишнее Код: plaintext 1. 2.
В примере было два выделения массива. Это одномерный, у тебя не используется. в остальном нормальный код 22426300 Это убрать, понятно, т.к. я там заменил ввод с клавиатуры на присваивание: Код: plaintext 1.
Выделение памяти думал если убрать: Код: plaintext 1.
то ошибка будет. А нет, ошибки нет, вы правы. Все убрал как вы сказали. Только осталось мерность повысить у массива ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:39 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Можно выделять память проще, быстрее и эффективней Вот тоже самое с двумя malloc()Комментарии написал, надеюсь поймешь Код: 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.
Можно одним malloc() обойтись, но это уже изврат будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 14:50 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
В общем, добавил константу: Код: plaintext 1.
Добавил 3-хмерный массив и выделение для него памяти: Код: plaintext 1.
Все остальное выделение памяти поместил в цикл: Код: plaintext 1. 2. 3. 4. 5.
Вот так компилируется и даже запускается без ошибок: Код: 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. 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.
Подскажите, я в том направлении двигаюсь? И как обращаться к отдельному элементу массива? если заменяю: Код: plaintext 1. 2. 3.
то ошибка str7.c:28:22: warning: assignment makes integer from pointer without a cast [enabled by default] stroka[x][i] = (char*)malloc(N*sizeof(char)); И при присвоении если вместо Код: plaintext 1. 2. 3.
str7.c:40:8: error: ‘stroka’ undeclared (first use in this function) strcpy(stroka[0][i],"stroka"); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 15:12 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Откуда stolbetc взялся? Надо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Комментарии не ленись писать по существу ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 15:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Откуда stolbetc взялся? Надо Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Комментарии не ленись писать по существу а, stroka так и остается, только на нее указатель... ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 15:30 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Тут ты просто устроил утечку памяти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 15:35 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ а, stroka так и остается, только на нее указатель... так и остается, только было stroka[i] а стало stroka[x][i] т.к. ты еще один уровень вложенности добавил ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 15:37 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Тут ты просто устроил утечку памяти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Так и есть: Код: 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. 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.
А как сделать чтобы указатель не терялся? Я подозреваю что вместо: Код: plaintext 1.
надо что-то типа этого использовать: Код: plaintext 1.
Но если так указать то компилятор ругается: str7.c: In function ‘main’: str7.c:21:12: warning: assignment from incompatible pointer type [enabled by default] *stroka[x] = (char**)malloc(K*sizeof(char)); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 17:14 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T, прочитал тему "Правила и рекомендации к оформлению сообщений на форуме С++" я довольно глупые вопросы задаю для уровня этого форума. Поэтому готов немного задонатить за решение этого вопроса. Надо сделать этот массив Показать как обращаться(читать-писать) к строке по адрессу типа (stroka[x][i]) С вашим уровнем знаний, уверен, для вас это 5 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 17:34 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я против донаторства в данном под-форуме. Но я могу перенести этот топик в Работу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 17:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Я против донаторства в данном под-форуме. Но я могу перенести этот топик в Работу. не, переносить не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Тут ты просто устроил утечку памяти Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если Код: plaintext 1.
объявить до for Код: 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. 26. 27. 28. 29.
то ошибка: str7.c:18:9: error: conflicting types for ‘stroka’ char** stroka = (char**)malloc(M*sizeof(char*)); ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:12 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Дружище. По обучению. Мой совет. Попробуй возьми бумажку в клеточку и каранадаш. И нарисуй память. Массивы указателей и твои строки. Указатель может выглядеть в памяти как целое число длиной 8 байтов (64 бит). Возможен вариант что и 32 бит для старых машин или мелких устройств. Особый указатель NULL - это ноль приведенный к типу указателя может быть терминатором или волшебной константой которая говорит например что память для этого указателя еще не аллоцирована или уже удалена. Символы соотв могут быть как 1 байт так и 2 в зависимости от разных настроек окружения. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:38 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Dima T, прочитал тему "Правила и рекомендации к оформлению сообщений на форуме С++" я довольно глупые вопросы задаю для уровня этого форума. Поэтому готов немного задонатить за решение этого вопроса. Надо сделать этот массив Показать как обращаться(читать-писать) к строке по адрессу типа (stroka[x][i]) С вашим уровнем знаний, уверен, для вас это 5 минут. С моим уровнем дохода мне донаты не интересны. Мне интересно направить в нужную сторону того кто действительно хочеть понять. Тут готов помогать бесплатно, но не готовыми решениями. Если надо только готовое решение, то в форуме работа за донат сделают студенты чуть умнее тебя. Только им сразу всю задачу описывай. Ты влез в очень сложную тему, она не только для новичка сложная, судя по последним постам мозг уже кипит, начался подбор места куда воткнуть строчку лишь бы скомпилировалось, это неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 18:59 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Код: plaintext 1. 2. 3.
Ты два раза объявил переменную stroka, такое ни один компилятор не пропустит. PS Эту подсказку не учел 22426362 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Дружище. По обучению. Мой совет. Попробуй возьми бумажку в клеточку и каранадаш. И нарисуй память. Массивы указателей и твои строки. Указатель может выглядеть в памяти как целое число длиной 8 байтов (64 бит). Возможен вариант что и 32 бит для старых машин или мелких устройств. Особый указатель NULL - это ноль приведенный к типу указателя может быть терминатором или волшебной константой которая говорит например что память для этого указателя еще не аллоцирована или уже удалена. Символы соотв могут быть как 1 байт так и 2 в зависимости от разных настроек окружения. Пока нарисовал строки. "A" - это 1 символ. "А1" - это два символа, объединенных в одномерный массив {"А1", "А2", "А3"} - это уже двумерный массив. {"А1", "А2", "А3"} {"B1", "B2", "B3"} - это трехмерный массив {"C1", "C2", "C3"} Сейчас с указателями попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Код: plaintext 1. 2. 3.
Ты два раза объявил переменную stroka, такое ни один компилятор не пропустит. PS Эту подсказку не учел 22426362 А как получается сделать, чтобы за пределами if не терялся указатель? Возможно ее там объявлять не надо вообще, ведь получается в if она второй раз объявляется и действует только там. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:06 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T я подбор места куда воткнуть строчку лишь бы скомпилировалось, это неправильно. Полностью согласен, пытаюсь разобраться. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:07 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Пока нарисовал строки. Теперь пронумеруй клеточки, все подряд, пустые, непустые: 1,2,3,...,100500. Так вот указатель на строку это номер клеточки в которой начинается строка. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:08 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
УткъПоказать как обращаться(читать-писать) к строке по адрессу типа (stroka[x][i]) Никак. С любым уровнем знания это невозможно в Си. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:11 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Пока нарисовал строки. Теперь пронумеруй клеточки, все подряд, пустые, непустые: 1,2,3,...,100500. Так вот указатель на строку это номер клеточки в которой начинается строка. Сделал это мысленно, до 3-й мерности. На третей надо еще пару листов, но смысл уже проясняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:11 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ А как получается сделать, чтобы за пределами if не терялся указатель? Нет у тебя if, есть for :) Как начать я уже показал 22426351 , как продолжить намекнул 22426362 , еще чуть-чуть и ответ получится. Думай, сегодня я ушел, завтра продолжим. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:14 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Хорошо, спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#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. 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.
Освобождение памяти сделал аналогично выделению, но в обратном порядке. Посмотрите пожалуйста, это рабочий вариант или опять я куда-то не туда зашел? Еще остался один вопрос, ниже его напишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:43 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Еще остался один вопрос, ниже его напишу. А вопрос вот какой. Если делаю простое присваивание: Код: plaintext 1.
Все проходит нормально. А если пытаюсь собрать ту же строку из двух, то ошибка: Код: plaintext 1.
Segmentation fault Максимальная длинна строки задана в 100-1 символ (define N 100) и непонятно почему тут ошибка. Складывать строки при заполнении массива надо, т.к. он будет заполняться из переменных. Подскажите пожалуйста как правильно в массив вставить запись, сложив строки? ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 19:55 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Уткъ Еще остался один вопрос, ниже его напишу. А вопрос вот какой. Если делаю простое присваивание: Код: plaintext 1.
Все проходит нормально. А если пытаюсь собрать ту же строку из двух, то ошибка: Код: plaintext 1.
Segmentation fault Максимальная длинна строки задана в 100-1 символ (define N 100) и непонятно почему тут ошибка. Складывать строки при заполнении массива надо, т.к. он будет заполняться из переменных. Подскажите пожалуйста как правильно в массив вставить запись, сложив строки? Вот так сработало, за два шага: Код: plaintext 1. 2.
strcat не может просто две строки сложить, надо чтобы первая уже была в памяти получается ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 20:07 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ А если пытаюсь собрать ту же строку из двух, то ошибка: Код: plaintext 1.
Segmentation fault Тебе в тестеры надо, ты умудрился откомпилировать то что не должно компилироваться. Не пользуйся тем компилятором. "stro" это const char*, т.е. строка только для чтения, физически она распологается в сегменте памяти помеченной только для чтения, а strcat туда писать пытается, поэтому Segmentation fault Писать можно только в stroka[0][0], поэтому делай так: Код: plaintext 1. 2. 3.
Или так как сделал тут 22426543 ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ strcat не может просто две строки сложить, надо чтобы первая уже была в памяти получается ) Не фантазируй. Он не складывает, а дописывает вторую в конец первой. Читай документацию . ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Тебе в тестеры надо, ты умудрился откомпилировать то что не должно компилироваться. Не пользуйся тем компилятором. Вот такой компилятор: gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Dima T "stro" это const char*, т.е. строка только для чтения, физически она распологается в сегменте памяти помеченной только для чтения, а strcat туда писать пытается, поэтому Segmentation fault Я интуитивно догадывался что что-то не так с "stro", когда она не в переменной, а вы смогли все четко объяснить. Спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#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. 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.
Освобождение памяти сделал аналогично выделению, но в обратном порядке. Посмотрите пожалуйста, это рабочий вариант или опять я куда-то не туда зашел? Еще остался один вопрос, ниже его напишу. Почти верно, косяк тут Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Есть прогресс. Скомпилилировалось и даже пару раз отработало :-) Вот что получилось: Код: 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. 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.
Освобождение памяти сделал аналогично выделению, но в обратном порядке. Посмотрите пожалуйста, это рабочий вариант или опять я куда-то не туда зашел? Еще остался один вопрос, ниже его напишу. Почти верно, косяк тут Код: plaintext 1.
Так должно быть? Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2022, 21:39 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ, дружище. Судя по профилю ты - Postgres-щик. Тебе действительно очень надо кодить на сях? Я почему спрашиваю. Для админ- или девопс- задачек можно задействовать целый спектр языков которые и проще и быстрее в освоении. Ruby, Python, e.t.c. И драйвера и клиенты PG для них давно созданы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 01:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ, дружище. Судя по профилю ты - Postgres-щик. Тебе действительно очень надо кодить на сях? Я почему спрашиваю. Для админ- или девопс- задачек можно задействовать целый спектр языков которые и проще и быстрее в освоении. Ruby, Python, e.t.c. Нужно сделать высоконагруженное приложение с парралельными запросами и копированием данных туда-сюда на огромное количество серверов (1000+) Поэтому выбор пал на Си (+libpq), как родной язык для PostgreSQL. В принципе, это все работало на psql+bash, но логика стала на столько сложна, что это пора выносить на уровень приложения. У Си оказались свои особенности, с которыми потихоньку разбираюсь. Хорошо этот раздел форума оказался живой и тут есть реальная помощь :-) Ну и сами понимаете, Си - это что-то реальное, основательное. Вот, к примеру, было непонятно кое-что с копированием данных - открыл исходник PostgreSQL и взял код прям оттуда, немного адаптировав под себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 02:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Пока нарисовал строки. "A" - это 1 символ. "А1" - это два символа, объединенных в одномерный массив {"А1", "А2", "А3"} - это уже двумерный массив. {"А1", "А2", "А3"} {"B1", "B2", "B3"} - это трехмерный массив {"C1", "C2", "C3"} Сейчас с указателями попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 05:13 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Так должно быть? Код: plaintext 1.
Да ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 06:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Dima T Тебе в тестеры надо, ты умудрился откомпилировать то что не должно компилироваться. Не пользуйся тем компилятором. Вот такой компилятор: gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Странно, GCC очень дотошный, более мелкие ляпы отказывается компилировать. Надо попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 06:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ mayton Уткъ, дружище. Судя по профилю ты - Postgres-щик. Тебе действительно очень надо кодить на сях? Я почему спрашиваю. Для админ- или девопс- задачек можно задействовать целый спектр языков которые и проще и быстрее в освоении. Ruby, Python, e.t.c. Нужно сделать высоконагруженное приложение с парралельными запросами и копированием данных туда-сюда на огромное количество серверов (1000+) Поэтому выбор пал на Си (+libpq), как родной язык для PostgreSQL. В принципе, это все работало на psql+bash, но логика стала на столько сложна, что это пора выносить на уровень приложения. У Си оказались свои особенности, с которыми потихоньку разбираюсь. Хорошо этот раздел форума оказался живой и тут есть реальная помощь :-) Ну и сами понимаете, Си - это что-то реальное, основательное. Вот, к примеру, было непонятно кое-что с копированием данных - открыл исходник PostgreSQL и взял код прям оттуда, немного адаптировав под себя. Си это инструмент для написания драйверов и т.п. Я думал это студенческое творчество, типа задали сделать на чистом С, для этого потянет, а для реального ПО - нет. Во-первых элементарно можно накосячить, например пропустил ты тут звездочку 22426622 , и вроде работает, а на самом деле ты такие себе грабли подложил что устанешь их искать когда наступишь. Ты выделил M байт (char 1 байт) вместо M*8 байт (char* 8 байт), таким образом ты будешь работать с памятью за пределами массива, и оно будет работать до какого-то момента. В лучшем случае словишь Segmentation fault, в худшем будешь удивляться почему меняются данные в совсем другой переменной. Во-вторых то что мы с тобой сочинили тянет только на студенческую поделку, 100500 вызовов malloc() это тормоз и неэффективное использование памяти. Это надо оптимизировать, например как тут показывал 22426324 Возьми хотя бы С++, в нем есть все возможности С и более удобные средства управления памятью. По производительности они не отличаются. Хотя и это не лучший выбор, т.к. завтра ты захочешь распараллелить работу, а тут это нетривиально. В идеале надо брать Java, Go, C# или что-то подобное, где скрыты все рутинные моменты и можно писать не сильно опасаясь выстрелов в ногу. Тут тестировали скорость работы разных ЯП 21542058 только не зацикливайся на тех цифрах, там нагрузку на проц мерили, а у тебя на память и ввод/вывод, поэтому все ЯП будут одинаковы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 07:24 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Нужно сделать высоконагруженное приложение с парралельными запросами и копированием данных туда-сюда на огромное количество серверов (1000+) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 07:40 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Так должно быть? Код: plaintext 1.
Да Отлично :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 10:24 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ пропущено... Вот такой компилятор: gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Странно, GCC очень дотошный, более мелкие ляпы отказывается компилировать. Надо попробовать. Я по умолчанию запускаю gcc file.c -o file наверняка там какая-то опции запуска есть, которые повышают блидетьность. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 10:25 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ пропущено... Нужно сделать высоконагруженное приложение с парралельными запросами и копированием данных туда-сюда на огромное количество серверов (1000+) Поэтому выбор пал на Си (+libpq), как родной язык для PostgreSQL. В принципе, это все работало на psql+bash, но логика стала на столько сложна, что это пора выносить на уровень приложения. У Си оказались свои особенности, с которыми потихоньку разбираюсь. Хорошо этот раздел форума оказался живой и тут есть реальная помощь :-) Ну и сами понимаете, Си - это что-то реальное, основательное. Вот, к примеру, было непонятно кое-что с копированием данных - открыл исходник PostgreSQL и взял код прям оттуда, немного адаптировав под себя. Си это инструмент для написания драйверов и т.п. Я думал это студенческое творчество, типа задали сделать на чистом С, для этого потянет, а для реального ПО - нет. Во-первых элементарно можно накосячить, например пропустил ты тут звездочку 22426622 , и вроде работает, а на самом деле ты такие себе грабли подложил что устанешь их искать когда наступишь. Ты выделил M байт (char 1 байт) вместо M*8 байт (char* 8 байт), таким образом ты будешь работать с памятью за пределами массива, и оно будет работать до какого-то момента. В лучшем случае словишь Segmentation fault, в худшем будешь удивляться почему меняются данные в совсем другой переменной. Во-вторых то что мы с тобой сочинили тянет только на студенческую поделку, 100500 вызовов malloc() это тормоз и неэффективное использование памяти. Это надо оптимизировать, например как тут показывал 22426324 Возьми хотя бы С++, в нем есть все возможности С и более удобные средства управления памятью. По производительности они не отличаются. Хотя и это не лучший выбор, т.к. завтра ты захочешь распараллелить работу, а тут это нетривиально. В идеале надо брать Java, Go, C# или что-то подобное, где скрыты все рутинные моменты и можно писать не сильно опасаясь выстрелов в ногу. Тут тестировали скорость работы разных ЯП 21542058 только не зацикливайся на тех цифрах, там нагрузку на проц мерили, а у тебя на память и ввод/вывод, поэтому все ЯП будут одинаковы. Да там по сути простые операции, просто надо массив серверов и по ним подключения идут потом. С++ да, рассматриваю. Остальные вряд ли, т.к. требуется парралельное выполнение запросов, т.е. использование библиотеки libpq + надо чтоб компилился и под винду и под linux ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 10:28 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Basil A. Sidorov Уткъ Нужно сделать высоконагруженное приложение с парралельными запросами и копированием данных туда-сюда на огромное количество серверов (1000+) А что такое runtime? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 10:29 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Кстати, правильлно ли я понял что количество столбцов массива надо обязательно через константу присваивать, а количество строк можно из константы вывести в переменную? Т.е. K вывести в переменную: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 10:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ А что такое runtime? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 11:04 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А что такое runtime?компоненты, библиотеки времени выполнения. Без Runtime код работать не будет Условно Для Java - это JRE Для C# - .NET и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 11:09 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinov А что такое runtime? Условно Для Java - это JRE Для C# - .NET и т.д. Звучит довольно мерзко. А разве для выполнения скомпилированного exe файла на С# требуются какие-то запущенные процессы в ОС? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 11:11 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Добавил проверку выделилась ли память при аллокации, надеюсь верно написал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 11:14 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Нужно сделать высоконагруженное приложение с парралельными запросами и копированием данных туда-сюда на огромное количество серверов (1000+) В современном бизнес-программировании большая пропускная способность вобщем-то не зависит от выбора языка разработки. А зависит от того насколько грамотно ты смог распараллелить задачу на независимые части. Например разработчик AWS-Lambda делает бизнес-функцию затем закидывает ее в облако и далее ее можно умножить на 1000 просто в конфиге. Много экземпляров функции + грамотно партицированный S3 storage решают почти все мыслимые задачи. Я не знаю что ты там надумал в плане с копированием 1000+ серверов но разработку POC можно было вполне начать с Java, Python, Ruby, Node e.t.c. Все это прекрасно устанавливается на современный Linux. Тоесть мне кажется тебе надо сосредоточиться именно на решении собственно твоей задачи копирования данных. А менеджмент памяти языка С тебя похоронит надолго. Закопаешся просто. Вот реально когда тебе понадобиться язык С - это когда например Java/Python уже перестанут успевать с копированием данных и ты исчерпаешь все возможности их оптимизации. Но этой точки очень сложно достигнуть. Обычно I/O является первым барьером для достижения ее. Вот, к примеру, было непонятно кое-что с копированием данных - открыл исходник PostgreSQL и взял код прям оттуда, немного адаптировав под себя. Сам факт копирования фрагмента кода приводит меня в изумление. Я думаю что копировать без контекста (без глобальных переменны) нельзя. По моему только язык Форт позволял такое делать. Для языка С таким глобальным контекстом по любому будет память, переменные библиотеки и объекты ОС. Поэтому то что ты копировал нужно подвергнуть code-review. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 11:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ, если "Hello word!" в консоли - то имхо ничего не надо ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 11:20 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Alex_Ustinov пропущено... компоненты, библиотеки времени выполнения. Без Runtime код работать не будет Условно Для Java - это JRE Для C# - .NET и т.д. Звучит довольно мерзко. А разве для выполнения скомпилированного exe файла на С# требуются какие-то запущенные процессы в ОС? И для С это надо, и для С++. Только это не отдельные процессы, библиотеки работающие в твоем процессе, если упрощенно DLL. Ты против использования DLL? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 12:18 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Кстати, правильлно ли я понял что количество столбцов массива надо обязательно через константу присваивать, а количество строк можно из константы вывести в переменную? Т.е. K вывести в переменную: Код: plaintext 1. 2. 3.
У тебя динамическое выделение памяти, можешь заменить константы на переменные. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 12:24 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Добавил проверку выделилась ли память при аллокации, надеюсь верно написал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Правильно, но учти что при срабатывании ранее выделенная память у тебя не освободится, а будет хз в каком состоянии и по хорошему при такой сработке надо совсем завершать работу всего приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 12:27 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Вот, к примеру, было непонятно кое-что с копированием данных - открыл исходник PostgreSQL и взял код прям оттуда, немного адаптировав под себя. Сам факт копирования фрагмента кода приводит меня в изумление. Я думаю что копировать без контекста (без глобальных переменны) нельзя. По моему только язык Форт позволял такое делать. Для языка С таким глобальным контекстом по любому будет память, переменные библиотеки и объекты ОС. Поэтому то что ты копировал нужно подвергнуть code-review. Я так подозреваю это был пример работы с либой libpq на С. Я так понял это либа для работы из С напрямую с PostgreSQL . Погуглил, примеры на С везде, как понимаю отсюда и родилось требование использовать С. PS Если так, то С++ тоже справится, код править не придется. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 12:35 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ А разве для выполнения скомпилированного exe файла на С# требуются какие-то запущенные процессы в ОС? А линуксоиды не понимают своего счастья и до сих пор не включили Mono/NetCore в базовые компоненты своих дистрибутивов. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 12:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А менеджмент памяти языка С тебя похоронит надолго. Закопаешся просто. Есть такое, с массивом не думал что будет так сложно. Планировал массив создать за час максимум ) mayton Вот реально когда тебе понадобиться язык С - это когда например Java/Python уже перестанут успевать с копированием данных и ты исчерпаешь все возможности их оптимизации. Но этой точки очень сложно достигнуть. Обычно I/O является первым барьером для достижения ее. Тут довольно большая нагрузка ожидается. mayton Сам факт копирования фрагмента кода приводит меня в изумление. Я думаю что копировать без контекста (без глобальных переменны) нельзя. По моему только язык Форт позволял такое делать. Для языка С таким глобальным контекстом по любому будет память, переменные библиотеки и объекты ОС. Поэтому то что ты копировал нужно подвергнуть code-review. Да, конечно, я там переменные подправил, мне нужно было понять сам принцип, примеров не было, в итоге скопировал из исходника строчек 5 и переделал их под себя. ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 13:50 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinov Уткъ, если "Hello word!" в консоли - то имхо ничего не надо Хеллоу ворд - это вчерашний день. А точнее я его еще на прошлой неделе сделал :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 13:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Ты против использования DLL? нет. я просто думал что там какая-нить служба\демон должны были крутиться чтобы работало. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 13:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Кстати, правильлно ли я понял что количество столбцов массива надо обязательно через константу присваивать, а количество строк можно из константы вывести в переменную? Т.е. K вывести в переменную: Код: plaintext 1. 2. 3.
У тебя динамическое выделение памяти, можешь заменить константы на переменные. Супер! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 13:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Добавил проверку выделилась ли память при аллокации, надеюсь верно написал: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Правильно, но учти что при срабатывании ранее выделенная память у тебя не освободится, а будет хз в каком состоянии и по хорошему при такой сработке надо совсем завершать работу всего приложения. Это у меня в main выполняется, я думал что return 1; в main завершает работу приложения, протестирую. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 13:52 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Я так подозреваю это был пример работы с либой libpq на С. Я так понял это либа для работы из С напрямую с PostgreSQL . Погуглил, примеры на С везде, как понимаю отсюда и родилось требование использовать С. . Так точно! ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 13:53 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Есть такое, с массивом не думал что будет так сложно. Планировал массив создать за час максимум ) большинство С/С++ newcomers умирают на указателях. Потом они всплывают в районе C#/Delphi/1C e.t.c. А поскольку в С строки и указатели - принципиально неотделимы - то вот приходится получать такой высокий порог вхождения. А ты на что расчитывал? УткъТут довольно большая нагрузка ожидается. Нагруженные системы (условно) делятся на 2 категории. - optimized by throughput - by response time И в зависимости от этого рода нагрузки в системе крутятся разные гайки и разные выбираются языки и технологии. Предполагаю что твоя задача с базами связанная с репликациями или с ETL. Если это так то они попадают в первую категорию. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 13:58 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Это у меня в main выполняется, я думал что return 1; в main завершает работу приложения, протестирую. Правильно думал, если это в main() то будет завершение. Если в другом месте, то просто вернешься на уровень вверх. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 14:24 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Нагруженные системы (условно) делятся на 2 категории. - optimized by throughput - by response time И в зависимости от этого рода нагрузки в системе крутятся разные гайки и разные выбираются языки и технологии. Предполагаю что твоя задача с базами связанная с репликациями или с ETL. Если это так то они попадают в первую категорию. Тут немного другая категория. Главная задача не держать коннекты в БД и чтобы ничего не зависло. Т.е. главное это надежность и прозрачность для конечных пользоватлей. А высокая нагрузка планируется просто из-за большого количества узлов. Т.е. тут нет такого что аптайм 24\7 требуется, просто запуск по расписанию с минималным воздействием на узлы. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 14:33 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Это у меня в main выполняется, я думал что return 1; в main завершает работу приложения, протестирую. Правильно думал, если это в main() то будет завершение. Если в другом месте, то просто вернешься на уровень вверх. Ага, понял, значит надо exit использовать, чтоб везде сработал ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 14:34 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Тут немного другая категория. Главная задача не держать коннекты в БД и чтобы ничего не зависло. Т.е. главное это надежность и прозрачность для конечных пользоватлей. А высокая нагрузка планируется просто из-за большого количества узлов. Т.е. тут нет такого что аптайм 24\7 требуется, просто запуск по расписанию с минималным воздействием на узлы. Сокетный пул? А по какому принципу вы будете "отрубать" коннекты? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 14:40 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ Тут немного другая категория. Главная задача не держать коннекты в БД и чтобы ничего не зависло. Т.е. главное это надежность и прозрачность для конечных пользоватлей. А высокая нагрузка планируется просто из-за большого количества узлов. Т.е. тут нет такого что аптайм 24\7 требуется, просто запуск по расписанию с минималным воздействием на узлы. Сокетный пул? А по какому принципу вы будете "отрубать" коннекты? Таймаут в соединении, а потом kill -9 приложения. Думаю как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 14:49 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Капец вы вандалы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 14:55 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Для многомерных массивов не надо заморачиваться с отдельными массивами для размерностей, т.к. память все-равно одномерная. Достаточно сделать явное преобразование многомерного индекса в одномерный. Считается это элементарно. Компилятор неявно тоже самое делает для многомерных массивов. Например у тебя трехмерный массив размерностью [K,M,N] тогда всего ячеек будет K*M*N, такого размера и объявляешь массив для хранения. Формула для получения индекса ячейки [k,m,n] такая: Код: plaintext 1.
Исходник Код: 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. 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 15:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Добавил проверку выделилась ли память при аллокации, надеюсь верно написал: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 15:43 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Для многомерных массивов не надо заморачиваться с отдельными массивами для размерностей, т.к. память все-равно одномерная. Достаточно сделать явное преобразование многомерного индекса в одномерный. Считается это элементарно. Компилятор неявно тоже самое делает для многомерных массивов. Например у тебя трехмерный массив размерностью [K,M,N] тогда всего ячеек будет K*M*N, такого размера и объявляешь массив для хранения. Формула для получения индекса ячейки [k,m,n] такая: Код: plaintext 1.
Исходник Код: 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. 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.
Да, я про подобное слышал вот в этой лекции: [youtube=https://www.youtube.com/watch?v=MQBV3PMx5sg] Такое сделаю обязательно. В общем, протестил, массив из данных базы на 7 тыс строк создается нормально, пару сек. Сейчас буду массово цеплять libpq и запросы к массиву, как с ними разберусь буду оптимизировать по памяти ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 17:14 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Уткъ Добавил проверку выделилась ли память при аллокации, надеюсь верно написал: Код: plaintext 1.
Компилятор не ругнулся на такое ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 17:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ В общем, протестил, массив из данных базы на 7 тыс строк создается нормально, пару сек. Улыбнуло. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 17:48 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
maytonУлыбнуло. Самое смешное, что это всё в общем-то и не нужно, а скорость при использовании COPY ещё и повысится. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 18:08 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
У меня всё время крутится в голове что у Постгреса есть какой-то коробочный пул. Помню читал. Лень искать в документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 18:16 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Пул и даже балансер есть, но для задачи автора ни один из них не нужен. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 18:35 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Убийство сессий? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 18:39 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Улыбнуло. Тысячи баз и софт на коленке писаный, забавно все там ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 21:32 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Убийство сессий? Вы будете смеятся, но некоторые сессии не убиваются, особенно это обидно когда она создана dblink-ом. Тогда приходится рестартовать постгресс, по другому никак, иначе сессия висит вечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2022, 23:43 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я так понимаю что мы всё равно не поймем. В топике решается проблема XY. Мы здесь знаем С++. И не знаем зачем вам нужно стрелять по сессиям Postgres. Но я догадываюсь. Возможно у вас текут ресурсы? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2022, 00:01 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ White Owl пропущено... Пассивный и активный залоги смешал в кучу. Компилятор не ругнулся на такое ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.01.2022, 20:28 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Модератор: Удалил лишнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 00:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ ... Я по умолчанию запускаю gcc file.c -o file наверняка там какая-то опции запуска есть, которые повышают блидетьность. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 13:33 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinov-Wall И -Werror -Wextra тоже рекомендую. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 14:10 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
В последних версиях есть средства и потяжелее (топику не поможет, но может остальным=) fsanitize fanalyzer ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 14:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Alex_Ustinov-Wall И -Werror -Wextra тоже рекомендую. -Werror все предупреждения валит в ошибку ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 16:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinov-Werror все предупреждения валит в ошибку И это - самый надёжный способ не упустить что-то важное, всё правильно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 17:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
получаем что - Werror перекроет - Wall (+ - Wextra ) получаем ИЛИ ) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 17:34 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Нет, он не перекрывает, а дополняет. Без -Wall/extra он бесполезен, поскольку не активизируется без наличия предупреждений. И сам по себе не повышает уровень диагностики. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 18:41 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
у меня так (какой то код вначале этого топика) gcc-8.3.0 (Win10) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 19:37 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinovу меня так (какой то код вначале этого топика) А без -Werror ты получаешь чистый вывод или то же самое в виде предупреждения? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 19:40 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, предупреждение Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
gcc version 9.2.0 (tdm64-1) CBlocks20 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 20:09 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinov у меня так (какой то код вначале этого топика) gcc-8.3.0 (Win10) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
А если будешь внимательнее читать топик, то узнаешь что этот код рассчитывался именно на С. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.01.2022, 23:23 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinovgcc version 9.2.0 (tdm64-1) Кстати, эта версия имеет бага в обработке исключений на 64-х битах. Скомпилированная программа крашится если адрес исключения выше четырёх гигабайт. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 01:23 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Ну правильно. С++ на такое смотрит косо. А С разрешает. Одно из различий между языками. А если будешь внимательнее читать топик, то узнаешь что этот код рассчитывался именно на С. Dimitry SibiryakovКстати, эта версия имеет бага в обработке исключений на 64-х битах.давно не обновлялся, летом "сено косил") ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 01:57 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Alex_Ustinovдавно не обновлялся, летом "сено косил") Десятка TDM вообще не работает, так что можно даже не пробовать. Я вернулся к 8.1 от MinGW-W64. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 02:28 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, 8.1 тоже есть, рядом стоит ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 12:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Добрый день. Появилась проблема. Нужно динамически сформировать имя переменной, типа такого: Код: plaintext 1.
Этих переменных будет формироваться огромное количество и статически их задать не получится. сами строки типа conninfo_127.123.123.123 я сформирую, но как потом сформированную строку объявить как переменную? Подскажите пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 13:52 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Динамических имен переменных в Си нет. Для таких целей обычно используют ассоциативные массивы, но в Си их тоже нет. Есть в С++ std::map и std::unordered_map ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:01 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Динамических имен переменных в Си нет. Для таких целей обычно используют ассоциативные массивы, но в Си их тоже нет. Есть в С++ std::map и std::unordered_map Ну смотрите: Код: 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. 26. 27. 28. 29. 30. 31. 32. 33.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:04 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T, неужели никак нельзя имя переменной сформировать динамически? ( ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:06 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъно как потом сформированную строку объявить как переменную? Никак. Меняй постановку задачи. Начни с вопроса "зачем мне все эти переменные нужны, да ещё и одновременно". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:07 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Уткъно как потом сформированную строку объявить как переменную? Никак. Меняй постановку задачи. Начни с вопроса "зачем мне все эти переменные нужны, да ещё и одновременно". они нужны для парралельных коннектов, которых может быть от 1 до 10000. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:08 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Похоже придется статически объявить и использовать поочереди, но это очень неудобно :( ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:09 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
объявить какое-то количество, равное сколько коннектов одновременно может выполняться, 100 например. И использовать поочереди, но это очень неудобно :( ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:12 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъони нужны для парралельных коннектов, которых может быть от 1 до 10000. А зачем нужны параллельные коннекты? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Повторяю, для таких целей используют ассоциативные массивы. Схематично это выглядит так Код: plaintext 1. 2. 3.
Это в С++ так. PS Имена переменных условны, во время работы они превращаются в адрес памяти, где хранится содержимое. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:16 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Повторяю, для таких целей используют ассоциативные массивы. Схематично это выглядит так Код: plaintext 1. 2. 3.
Это в С++ так. PS Имена переменных условны, во время работы они превращаются в адрес памяти, где хранится содержимое. Все время забываю проусловность переменных ) Кстати, такая идея пришла: Можно же стуктуру наверное использовать, точнее массив из структуры. Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:37 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Уткъони нужны для парралельных коннектов, которых может быть от 1 до 10000. А зачем нужны параллельные коннекты? чтобы уменьшить время выполнения программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:38 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъчтобы уменьшить время выполнения программы. За счёт чего должно уменьшиться время выполнения программы? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:48 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Уткъчтобы уменьшить время выполнения программы. За счёт чего должно уменьшиться время выполнения программы? За счет параллельных коннектов (и запросов). ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 14:49 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
УткъЗа счет параллельных коннектов (и запросов). Каким образом коннекты и запросы станут параллельными? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:20 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov УткъЗа счет параллельных коннектов (и запросов). Каким образом коннекты и запросы станут параллельными? они будут вызваны параллельно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:32 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я так понимаю что эти настройки - max_parallel * - * processes будут ограничивать любой параллелизм сверху. https://www.postgresql.org/docs/current/how-parallel-query-works.html ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:43 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъони будут вызваны параллельно. КАК? API PostgeSQL синхронное, функция не вернётся пока не выполнит операцию. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:45 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Уткъони будут вызваны параллельно. КАК? API PostgeSQL синхронное, функция не вернётся пока не выполнит операцию. В том-то и дело что вернет. Чтобы здесь не забивать лишней информацией топик, выслал вам на почту, указанную в профиле, информацию про параллельные запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:50 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Я так понимаю что эти настройки - max_parallel * - * processes будут ограничивать любой параллелизм сверху. https://www.postgresql.org/docs/current/how-parallel-query-works.html Не, это когда уже запрос отправлен и он в несколько потоков выполняется. А там можно сделать так чтобы запрос отправился и вернул управление к программе, затем просто отслеживаются статусы. PQsendQuery Отправляет команду серверу, не ожидая получения результата . ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А подскажите, можно сдеать функцию, передай ей переменную и чтобы она эту переменную изменила так, чтобы измененная переменная была доступна в main() ? У меня пока пулучилось передать в функию в переменную, она там считывается в локальную переменную функции и изменить эту переменную ы функции так. чтобы она и в в main() поменялась - не получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:57 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъвыслал вам на почту, указанную в профиле В моём профиле не указана почта. В любом случае - да, массив (даже обычный, а не ассоциативный) тебе поможет. Это как раз и есть пачка слепленных вместе переменных. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:57 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Чета как-то сложно всё. Вот мне в любой DBMS нужно например ее jdbc-драйвер, пул коннектов (типа Hikari), и примитивы мультипоточки Future/Callable. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 15:58 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ А подскажите, можно сдеать функцию, передай ей переменную и чтобы она эту переменную изменила так, чтобы измененная переменная была доступна в main() ? У меня пока пулучилось передать в функию в переменную, она там считывается в локальную переменную функции и изменить эту переменную ы функции так. чтобы она и в в main() поменялась - не получается. Можно, в параметрах передаешь указатель на переменную https://metanit.com/cpp/c/5.7.php ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ mayton Я так понимаю что эти настройки - max_parallel * - * processes будут ограничивать любой параллелизм сверху. https://www.postgresql.org/docs/current/how-parallel-query-works.html Не, это когда уже запрос отправлен и он в несколько потоков выполняется. А там можно сделать так чтобы запрос отправился и вернул управление к программе, затем просто отслеживаются статусы. PQsendQuery Отправляет команду серверу, не ожидая получения результата . Чтобы действительно распараллелить запросы надо делать множество независимых коннектов к базе и посылать разные запросы через них. А там делаешь ты синхронные или асинхронные запросы уже не важно. Асинхронный запрос очень удобен если тебе лень самостоятельно делать многопоточное приложение, а программа кроме ожидания ответа сервера должна делать что-то еще, например мигать надписью "ждем ответа от сервера уже Х секунд". Чтобы юзер не думал что ты завис. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Уткъвыслал вам на почту, указанную в профиле В моём профиле не указана почта. В любом случае - да, массив (даже обычный, а не ассоциативный) тебе поможет. Это как раз и есть пачка слепленных вместе переменных. выслал сюда, наверное это не почта... Массив, получается надо делать из структуры? Т.к. там разные типы данных, довольно экзотические... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ А подскажите, можно сдеать функцию, передай ей переменную и чтобы она эту переменную изменила так, чтобы измененная переменная была доступна в main() ? У меня пока пулучилось передать в функию в переменную, она там считывается в локальную переменную функции и изменить эту переменную ы функции так. чтобы она и в в main() поменялась - не получается. Можно, в параметрах передаешь указатель на переменную https://metanit.com/cpp/c/5.7.php Спасибо, читаю ) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:01 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Уткъ пропущено... Не, это когда уже запрос отправлен и он в несколько потоков выполняется. А там можно сделать так чтобы запрос отправился и вернул управление к программе, затем просто отслеживаются статусы. PQsendQuery Отправляет команду серверу, не ожидая получения результата . Чтобы действительно распараллелить запросы надо делать множество независимых коннектов к базе и посылать разные запросы через них. А там делаешь ты синхронные или асинхронные запросы уже не важно. Асинхронный запрос очень удобен если тебе лень самостоятельно делать многопоточное приложение, а программа кроме ожидания ответа сервера должна делать что-то еще, например мигать надписью "ждем ответа от сервера уже Х секунд". Чтобы юзер не думал что ты завис. Так, парралельные запросы это не 100500 запросов к одному серверу. А 1 запрос к 100500 серверам. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Dima T Повторяю, для таких целей используют ассоциативные массивы. Схематично это выглядит так Код: plaintext 1. 2. 3.
Это в С++ так. PS Имена переменных условны, во время работы они превращаются в адрес памяти, где хранится содержимое. Все время забываю проусловность переменных ) Кстати, такая идея пришла: Можно же стуктуру наверное использовать, точнее массив из структуры. Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
а для нахождения делаешь цикл типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:09 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Утк. Ты всех запутал. Это называется distributed . ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:09 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Кстати задолго до 100500 сетевых коннектов количество портов на 1 ethernet интерфейс резко закончится ... поэтому тут уж или Ишак сдохнет или Султан. Я-бы предложил внести в топик более близкое к задаче число. 100? 1000? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Можно начать с совсем приземленных вещей и спросить про готовность версии для 1 соединения. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ White Owl пропущено... Для параллельных запросов это тебе не поможет. Когда ты отправишь второй запрос таким образом - получишь ошибку "занято". Чтобы действительно распараллелить запросы надо делать множество независимых коннектов к базе и посылать разные запросы через них. А там делаешь ты синхронные или асинхронные запросы уже не важно. Асинхронный запрос очень удобен если тебе лень самостоятельно делать многопоточное приложение, а программа кроме ожидания ответа сервера должна делать что-то еще, например мигать надписью "ждем ответа от сервера уже Х секунд". Чтобы юзер не думал что ты завис. Так, парралельные запросы это не 100500 запросов к одному серверу. А 1 запрос к 100500 серверам. Кстати, из личного опыта - это не обязательно ускоряет работу. У меня была задача: из центрального офиса узнать состояние дел в филиалах. Из центрального офиса подключались к БД филиала, отправляли несколько запросов на итоговые суммы и отключались. Если база в филиалах работала как полагается, то весь цикл подключение-запрос-отключение укладывался в пару секунд. И последовательный опрос всех филиалов занимал около двух-трех минут. Проблемы были если филиал выключил свою БД или сеть до филиала упала - тогда подключение могло занять до полуминуты прежде чем выдать ошибку. Сделали параллельные запросы ко всем филиалам разом - серьезно улучшили время работы если есть проблемы в сети, но примерно в три раза ухудшили работу если с филиалами нет проблем. Затык был в клиентской библиотеке подключения, она не могла держать более десятка подключений разом. Внутри самой библиотеки был "тайный" пул (в смысле не описанный в документации), и если в данный момент уже есть десять параллельных коннектов (не важно рабочих или нет) одиннадцатый будет висеть внутри connect() функции. Впрочем, это было в 2005-ом и на другой БД. Что будет с Постгресом в 2022-ом - надо пробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:26 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Уткъ пропущено... Так, парралельные запросы это не 100500 запросов к одному серверу. А 1 запрос к 100500 серверам. Кстати, из личного опыта - это не обязательно ускоряет работу. У меня была задача: из центрального офиса узнать состояние дел в филиалах. Из центрального офиса подключались к БД филиала, отправляли несколько запросов на итоговые суммы и отключались. Если база в филиалах работала как полагается, то весь цикл подключение-запрос-отключение укладывался в пару секунд. И последовательный опрос всех филиалов занимал около двух-трех минут. Проблемы были если филиал выключил свою БД или сеть до филиала упала - тогда подключение могло занять до полуминуты прежде чем выдать ошибку. Сделали параллельные запросы ко всем филиалам разом - серьезно улучшили время работы если есть проблемы в сети, но примерно в три раза ухудшили работу если с филиалами нет проблем. Затык был в клиентской библиотеке подключения, она не могла держать более десятка подключений разом. Внутри самой библиотеки был "тайный" пул (в смысле не описанный в документации), и если в данный момент уже есть десять параллельных коннектов (не важно рабочих или нет) одиннадцатый будет висеть внутри connect() функции. Впрочем, это было в 2005-ом и на другой БД. Что будет с Постгресом в 2022-ом - надо пробовать. Ага, интересный случай. Я этот способ использую давно, сейчас просто на Си решил переложить, так что сам метод опробованный. парралельность я конечно ограницу искусттвенно, на всяйкий случай. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Утк. Ты всех запутал. Это называется distributed . Да, наверное, я не знал как это называется просто. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:55 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Кстати задолго до 100500 сетевых коннектов количество портов на 1 ethernet интерфейс резко закончится ... поэтому тут уж или Ишак сдохнет или Султан. Я-бы предложил внести в топик более близкое к задаче число. 100? 1000? ну в райное 100-1000 в итоге думаю и будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:56 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Уткъ пропущено... Все время забываю проусловность переменных ) Кстати, такая идея пришла: Можно же стуктуру наверное использовать, точнее массив из структуры. Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
а для нахождения делаешь цикл типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
..сейчас попробую сделать... Спасибо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 16:57 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ mayton Кстати задолго до 100500 сетевых коннектов количество портов на 1 ethernet интерфейс резко закончится ... поэтому тут уж или Ишак сдохнет или Султан. Я-бы предложил внести в топик более близкое к задаче число. 100? 1000? ну в райное 100-1000 в итоге думаю и будет. Хорошо. Пускай пессиместично это будет до 1000 соединений с 1 клиента. Но здесь у меня (к моему ужасу) возникает другой вопрос. Как ты будешь их координировать? Нужно-ли сводить их результаты в 1 точку? Просто здесь нужна либо много unix-processes или threads. Беря во внимание что ты только недавно разбирался со строками. Тебе дальше надо разбираться с темой еще более сложной. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:12 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Но здесь у меня (к моему ужасу) возникает другой вопрос. Как ты будешь их координировать? Нужно-ли сводить их результаты в 1 точку? Просто здесь нужна либо много unix-processes или threads. Беря во внимание что ты только недавно разбирался со строками. Тебе дальше надо разбираться с темой еще более сложной. Да и к моему ужасу тоже :-((( ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 17:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
maytonТебе дальше надо разбираться с темой еще более сложной. Да, ему предстоит освоить циклы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 18:18 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov maytonТебе дальше надо разбираться с темой еще более сложной. Да, ему предстоит освоить циклы. Циклы вроде были уже тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 18:28 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
У тебя есть словесное описание всего алгоритма? Тоесть Без всяких бизнес названий и секретной инфы. Типа. 1) Подконнектится к 1000 баз (в наличии должен быть список столько же хостов-паролей) 2) и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 18:34 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton У тебя есть словесное описание всего алгоритма? Тоесть Без всяких бизнес названий и секретной инфы. Типа. 1) Подконнектится к 1000 баз (в наличии должен быть список столько же хостов-паролей) 2) и т.д. Да, конечно. 1) подключиться к 1 серверу, взять с него список ip (1000+). 2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем. 3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место. Подключение проходит нормально, со структорой еще не раборался, чтоы в ней все хранить. Передача char переменных в функци и обратно получилась нормльно, а специфических переменных (PGconn* и PGresult* ) что-то не получилось пока из функции вытащить, только в нее передались. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 18:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ а специфических переменных (PGconn* и PGresult* ) что-то не получилось пока из функции вытащить, только в нее передались. Это указатели, поэтому надо использовать указатели на указатели (PGconn** и PGresult** ) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 19:29 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ ==> 2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем. 3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место. Вот тут есть вопрос. Этот физический хост где ты запускаешь С-приложение должен обладать достаточно хорошим сетевым каналом. Потому-что одновременная отгрузка инфы на много хостов делит трафик пропорционально. Допустим у тебя 100 Мбит. И тогда каждая БД получит канал навроде 100 / 1000 = 0.1 Мбит или 100 Килобит или 12 килобайт в секунду. Это скорость модема. Если ты не хочешь пропорционально (будет например что-то типа Round-Robin) 10 работающих при 980 ожидающих - то это будет более умная схема и более понятная. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 20:10 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
По поводу надёжности. Тут даже в датацентрах где виртуализация и внутрення сетка - всё равно часть хостов отъезжают по разным причинам. Гарантировать-же оркестровку даже 100 хостов офигенски сложно. Постоянно что-то не пингуется. Что-то недоступно. Где-то мигает канал. То есть то нет. Где-то полоса пропускания упала. Вобщем тут еще должно быть до чёрта технологий retry/reconnect. Ведение статусов хостов в отдельной табличке. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 20:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ ==> 2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем. 3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место. Вот тут есть вопрос. Этот физический хост где ты запускаешь С-приложение должен обладать достаточно хорошим сетевым каналом. Потому-что одновременная отгрузка инфы на много хостов делит трафик пропорционально. Допустим у тебя 100 Мбит. И тогда каждая БД получит канал навроде 100 / 1000 = 0.1 Мбит или 100 Килобит или 12 килобайт в секунду. Это скорость модема. Если ты не хочешь пропорционально (будет например что-то типа Round-Robin) 10 работающих при 980 ожидающих - то это будет более умная схема и более понятная. ИМХО тут проще наоборот решать: данные из таблички в архиве кидаешь куда-нибудь в инет, а всем ожидающим ссылку на скачивание. Дальше все качают и заливают каждый в свою БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 20:28 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ 3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место. Здесь - окей если работает агрегация. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 20:55 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T ИМХО тут проще наоборот решать: данные из таблички в архиве кидаешь куда-нибудь в инет, а всем ожидающим ссылку на скачивание. Дальше все качают и заливают каждый в свою БД. Это при условии что у него единый шаблон обновления для всех баз. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 21:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ а специфических переменных (PGconn* и PGresult* ) что-то не получилось пока из функции вытащить, только в нее передались. Это указатели, поэтому надо использовать указатели на указатели (PGconn** и PGresult** ) Сделал в объявлении функции: Код: plaintext 1.
А при вызове функции Код: plaintext 1.
При этом в main они объявленны: Код: plaintext 1. 2.
Теперь передаются из функции обратно в main, надеюсь верно сделал. Спасибо! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 22:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ ==> 2) На эти 1000+ прогрузить табличку около 200 тыс записей, маленькая в общем. 3) На этих 1000+ выполнить простой SQL запрос и собрать результат выполнения в одно место. Вот тут есть вопрос. Этот физический хост где ты запускаешь С-приложение должен обладать достаточно хорошим сетевым каналом. Потому-что одновременная отгрузка инфы на много хостов делит трафик пропорционально. Допустим у тебя 100 Мбит. И тогда каждая БД получит канал навроде 100 / 1000 = 0.1 Мбит или 100 Килобит или 12 килобайт в секунду. Это скорость модема. Если ты не хочешь пропорционально (будет например что-то типа Round-Robin) 10 работающих при 980 ожидающих - то это будет более умная схема и более понятная. Есть такое дело. Тут уже не будет негативного влияния длинных запросов, как если бы это было сделано на psql, поэтому парралельность можно и уменьшать. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 22:01 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton По поводу надёжности. Тут даже в датацентрах где виртуализация и внутрення сетка - всё равно часть хостов отъезжают по разным причинам. Гарантировать-же оркестровку даже 100 хостов офигенски сложно. Постоянно что-то не пингуется. Что-то недоступно. Где-то мигает канал. То есть то нет. Где-то полоса пропускания упала. Вобщем тут еще должно быть до чёрта технологий retry/reconnect. Ведение статусов хостов в отдельной табличке. Пока на это можно не образать внимания, главное чтобы 95%-99% хостов были доступны. если недоступен - просто пропускается. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 22:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
УткъТут уже не будет негативного влияния длинных запросов, как если бы это было сделано на psql С чего ты это взял? Твоя программа ничем не будет отличаться от десятков параллельно запущенных psql. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 23:08 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
проще осуществить обратную задачу - на серверах по "крону" отдать отчет на центральный сервер ну если только это надо не по "щелчку клерка" ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 23:14 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Кто то переизобретает колесо Заббикс ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2022, 23:19 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Уткъ пропущено... Все время забываю проусловность переменных ) Кстати, такая идея пришла: Можно же стуктуру наверное использовать, точнее массив из структуры. Там просто типы не только char*, но и специфичиские библиотечные типа буфера и тп. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
а для нахождения делаешь цикл типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Спасибо! Это похоже на то что надо. Ради теста объявил такую структуру: Код: plaintext 1. 2. 3. 4.
Вот так массив объявил (причем если N даже 0 задать - все равно работает): Код: plaintext 1.
Вот так элементы присваваются: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Причем коннекты в БД создаются успешно. Ну это вообще то что надо!!! Только сильно похоже на первый пост, где я пытался делать так: Код: plaintext 1. 2. 3.
Скажите, так (массив из структур) точно можно массив объявлять, без ссылок на ссылки и т.п. ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:25 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А есть в Postgres аналог DBMS_SCHEDULER или DBMS_JOB ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:27 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А есть в Postgres аналог DBMS_SCHEDULER или DBMS_JOB ? Прямо в голом постгрессе нет. Есть какие-то поделки, я ими не пользовался. крон удобнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Читаю про массивы структур. Это круто. Но меня смущает что там ни где не выделяют и не высвобождают память: https://metanit.com/cpp/c/6.4.php Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Ну и меня насторажило что не выпало ни разу сегментайшн фаулт, с массивом структур. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
То что ты делаешь похоже на координатор распределенных ... толи отчетов толи репликаций. Мне кажется что в топике мы еще не исчерпали всех инженерных возможностей. Cron мне кажется неудобным к использованию. Ну .. пускай админы с девопсами его лупят. Для них - текстовые файлы - это native programming а для нас - нормальный API имеет обычно вид вызова функции из твоего языка разработки. Поэтому к чорту крон. Вот если-бы на всех slave-машинах (я буду эту 1000 штук хостов называть slave) был поднят какой-то Tomcat - тогда другое дело. Можно делать красивые задачи и чтоб сами slaves ходили в центр и получали задачи и исполняли их. Идея Димы - выкладывать на доступ табличку - хорошая. Я ее полностью поддерживаю. Но это в рамках вашей инфраструктуры надо обсуждать. Не в торренты конечно кидать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:48 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton То что ты делаешь похоже на координатор распределенных ... толи отчетов толи репликаций. Мне кажется что в топике мы еще не исчерпали всех инженерных возможностей. Cron мне кажется неудобным к использованию. Ну .. пускай админы с девопсами его лупят. Для них - текстовые файлы - это native programming а для нас - нормальный API имеет обычно вид вызова функции из твоего языка разработки. Поэтому к чорту крон. Вот если-бы на всех slave-машинах (я буду эту 1000 штук хостов называть slave) был поднят какой-то Tomcat - тогда другое дело. Можно делать красивые задачи и чтоб сами slaves ходили в центр и получали задачи и исполняли их. Идея Димы - выкладывать на доступ табличку - хорошая. Я ее полностью поддерживаю. Но это в рамках вашей инфраструктуры надо обсуждать. Не в торренты конечно кидать. Да, конечно, в идеале все через веб вызовы. Но на данном этапе выбрано такое архитектурное решение, довольно жесткое, но оно тут оправдано. В общем, попробую сейчас все переписать на массив из структур... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Вот такое объявление годиться? Код: plaintext 1. 2. 3. 4. 5. 6.
char* - это получается ссылка, для хранение строки в структуре это нормально или лучще как-нить так: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:55 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Не буду ничего советовать. Просто кажется что ты окончательно выбрал "C" как инструмент написания этого Proof-Of-Concept, хотя по идее надо было его сналача обкатать даже на shell-скриптах или Python и посмотреть где там что первое умрёт. Обежден что проблемы сетью и ошибки тебя похоронят. Просто закопаешся в нюансах. По мультипоточке - создай отдельный топик обязательно. Это будет длинная тема... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:58 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Не буду ничего советовать. Просто кажется что ты окончательно выбрал "C" как инструмент написания этого Proof-Of-Concept, хотя по идее надо было его сналача обкатать даже на shell-скриптах или Python и посмотреть где там что первое умрёт. Обежден что проблемы сетью и ошибки тебя похоронят. Просто закопаешся в нюансах. По мультипоточке - создай отдельный топик обязательно. Это будет длинная тема... На баше отработано. Немного другая архитектура и нагрузка на сеть меньша раз в 20 примерно, но суть такая же. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 00:59 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Ура, удалось получить Segmentation fault когда закомментировал выделение памяти в массиве, что ожидаемо: Код: plaintext 1.
Но настораживает отсутствие Segmentation fault даже когда N=0, даже когда прямо 0 прописываю: Код: plaintext 1.
все равно нет ошибок. Не пойму почему так... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 01:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
После каждого творческого эксперимента запускай свой бинарь под valgrind. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 01:05 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ На баше отработано. Немного другая архитектура и нагрузка на сеть меньша раз в 20 примерно, но суть такая же. Даже не буду спрашивать как вы там ошибки отрабатываете и retry-logic. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 01:06 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Уткъ На баше отработано. Немного другая архитектура и нагрузка на сеть меньша раз в 20 примерно, но суть такая же. Даже не буду спрашивать как вы там ошибки отрабатываете и retry-logic. чуть что kill -9 и все бояться и работает хорошо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 01:18 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Вы почти создали Erlang/OTP. Ну дай бог. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 01:21 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Ура, удалось получить Segmentation fault когда закомментировал выделение памяти в массиве, что ожидаемо: Код: plaintext 1.
Уткъ Но настораживает отсутствие Segmentation fault даже когда N=0, даже когда прямо 0 прописываю: Код: plaintext 1.
все равно нет ошибок. Не пойму почему так... Но ты что ты выделил ноль байт - означает что если ты начнешь в эту память писать - ты залезешь в пространство другого указателя который выдал тебе другой malloc(); Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Чаще всего, ты обращаясь к b залезешь в память c, но может быть и в a - это зависит от менеджера памяти (который предоставляется твоим компилятором). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 07:43 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Читаю про массивы структур. Это круто. Но меня смущает что там ни где не выделяют и не высвобождают память: https://metanit.com/cpp/c/6.4.php Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Ну и меня насторажило что не выпало ни разу сегментайшн фаулт, с массивом структур. Если кратко: память для переменных может выделятся на стеке и в куче . Когда явно выделяешь (malloc()), то выделяется в куче, неявно - на стеке. В основном на стеке располагаются локальные переменные, но ничто не мешает массив там расположить как в данном примере. Только имей ввиду что стек маленький, всего 1Мб обычно. Если будешь большие массивы там хранить, то словишь переполнение стэка (stack overflow) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 08:37 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Уткъ Ура, удалось получить Segmentation fault когда закомментировал выделение памяти в массиве, что ожидаемо: Код: plaintext 1.
Уткъ Но настораживает отсутствие Segmentation fault даже когда N=0, даже когда прямо 0 прописываю: Код: plaintext 1.
все равно нет ошибок. Не пойму почему так... Но ты что ты выделил ноль байт - означает что если ты начнешь в эту память писать - ты залезешь в пространство другого указателя который выдал тебе другой malloc(); Например: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Чаще всего, ты обращаясь к b залезешь в память c, но может быть и в a - это зависит от менеджера памяти (который предоставляется твоим компилятором). Теперь понятно, благодарю :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 09:53 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Читаю про массивы структур. Это круто. Но меня смущает что там ни где не выделяют и не высвобождают память: https://metanit.com/cpp/c/6.4.php Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Ну и меня насторажило что не выпало ни разу сегментайшн фаулт, с массивом структур. Если кратко: память для переменных может выделятся на стеке и в куче . Когда явно выделяешь (malloc()), то выделяется в куче, неявно - на стеке. В основном на стеке располагаются локальные переменные, но ничто не мешает массив там расположить как в данном примере. Только имей ввиду что стек маленький, всего 1Мб обычно. Если будешь большие массивы там хранить, то словишь переполнение стэка (stack overflow) Как все не просто оказалось, хорошо что 0 попробовал поставить. Спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 09:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Кстати, в чистом Си есть исключения? типа Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 09:56 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Кстати, в чистом Си есть исключения? типа Код: plaintext 1. 2. 3. 4. 5. 6.
Нет. В С++ есть ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 09:58 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Кстати, в чистом Си есть исключения? типа Код: plaintext 1. 2. 3. 4. 5. 6.
Нет. В С++ есть Жалко. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 10:50 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Терпи Сам выбрал. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 11:35 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Терпи Сам выбрал. Ага.... Получается после каждой опасной команды надо статус выполнения проверять и обрабатывать если что-то нет так идет... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 11:47 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Совершенно верно. Почти все функции kernel возвращают результат. В виде целого числа. Или в виде NULL/not NULL указателя. И твоя обязанность как С-разработчика всегда проверять этот результат. Открыл файл через fopen - тут-же проверил. Отпавил пачку данных в сокет через send - тут-же проверил на (-1) и так далее. С функциями libpq - тоже самое. Проверяй вообще все что можно проверять. Игнорировать это правило можно только в тех языках где механика exceptions позволяет сделать обобщённые обработчики ошибок для целых блоков кода или целых стеков. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 11:59 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Dima T пропущено... Нет. В С++ есть Жалко. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 12:41 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Когда никто не выкидывает исключений - некому их и ловить. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 13:46 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Когда блок catch ничего не делает - складывается ощущение что ... Все... Чики-пики ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 14:01 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Пока нарисовал строки. "A" - это 1 символ. Если объявлять строку символов в тексте ("Ц"), то "компилятор умный" и нулевой байт добавит. Если работать с char-массивами, то "плюсадын и (временами) \0". Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2022, 14:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Добрый день. в 1000 потоков не хочет: connection to server failed: could not create socket: Too many open files похоже коннекты как-то файлы занимают в ОС... А подскажите что еще занимать файлы? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2022, 16:11 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Эта поведение не связано с С++. Особенности ОС linux. Глянь как тут пишут https://stackoverflow.com/questions/880557/socket-accept-too-many-open-files ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2022, 18:01 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
И даже не "особенности", а конфигурация защиты от дураков. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2022, 18:25 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Эта поведение не связано с С++. Особенности ОС linux. Глянь как тут пишут https://stackoverflow.com/questions/880557/socket-accept-too-many-open-files Да, я понимаю это с С напрямую не связано. Настройки в ОС поменял конечно-же сразу. Но интересует, на что эти самые файлы расходуются? Я подозреваю что на коннекты к БД . А на что-нибудь еще может расходоваться? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2022, 11:23 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Тут надо читать книжки по архитектуре Linux. Я точно всех типов не помню но кажется pipes, sockets, и файловые дескрипторы - это один и тот-же тип ресурса с точки зрения Linux. Почему их надо ограничивать? Ну наверное потому что это не просто целое число или указатель. Это какая-то структура в памяти которая имеет размеры (очень актуально для TCP). И просто огульное использование открытых одновременно файлов или сокетов может скушать память. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2022, 11:40 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Кроме того сам PG-драйвер тоже на каждый сеанс может что-то аллоцировать. Переменные сеанса. Буфера для батчинга. Тоесть не только TCP сокет но и еще некое неизвестное X умножается на 1000 в твоейм кейсе. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.02.2022, 11:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton, Да, тестирую, коннекты, судя по всему занимают открытые файлы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 14:45 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Сталкнулся еще с такой проблемой: Код: plaintext 1.
При компиляции для Linux и Windows - это 1 сек и 0.001 сек сотвественно. Причем в виндоус sleep c большой буквы - Sleep. Подскажите, может быть есть какая-то универсальная задержка и под вин и под линукс? Если нет, то как это обходить? Переменную объявлять что за ОС и в зависимости от нее ставить sleep(1) или Sleep(1000) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 14:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Делай как тут https://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch Ну если с паузой ты выкрутился то с мультипоточкой такой фокус не прокатит. Слишком много всего переделать надо будет. Лучше делай 2 версии софта под 2 платформы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 14:53 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Делай как тут https://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch Ну если с паузой ты выкрутился то с мультипоточкой такой фокус не прокатит. Слишком много всего переделать надо будет. Лучше делай 2 версии софта под 2 платформы. Понял, спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
От sleep() в секундах мало пользы, обычно надо покороче паузы. Для этого в линуксе есть nanosleep() Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:08 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Задача же вроде бы была "сделать чтобы работало быстрее", нет?.. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:24 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T От sleep() в секундах мало пользы, обычно надо покороче паузы. Для этого в линуксе есть nanosleep() Код: plaintext 1. 2. 3. 4. 5. 6.
Да, я его тоже использую, вот так: Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:24 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Задача же вроде бы была "сделать чтобы работало быстрее", нет?.. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:30 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Делай как тут https://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch Ну если с паузой ты выкрутился то с мультипоточкой такой фокус не прокатит. Слишком много всего переделать надо будет. Лучше делай 2 версии софта под 2 платформы. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:39 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Siemargl mayton Делай как тут https://stackoverflow.com/questions/6649936/c-compiling-on-windows-and-linux-ifdef-switch Ну если с паузой ты выкрутился то с мультипоточкой такой фокус не прокатит. Слишком много всего переделать надо будет. Лучше делай 2 версии софта под 2 платформы. Ну ОК. Просто не видел чтоб кто-то под Windows затаскивал такие порты. Я не против тогда. Пускай берет pthreads. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:45 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я лично сделал наоборот: портировал _beginthreadex() на линух. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:47 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а как ты реализовал Код: plaintext 1.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 15:52 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Siemargl пропущено... pthreads переносима Ну ОК. Просто не видел чтоб кто-то под Windows затаскивал такие порты. Я не против тогда. Пускай берет pthreads. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Да, я его тоже использую, вот так: Код: plaintext 1.
Это С++ конструкция такая или Си? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:14 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Я лично сделал наоборот: портировал _beginthreadex() на линух. И в чём заключалось такое портирование? Просто как я понимаю _beginthreadex() настраивает Си-рантайм для MSVC. Как вы это портировали не очень понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:16 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
maytonа как ты реализовалEnterCriticalSection Это я не эмулировал, использую обёртку: Код: sql 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.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:16 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
petravИ в чём заключалось такое портирование? Так же как с остальной пачкой используемого мною Win32 API: я открыл спецификацию на MSDN и написал процедуру, реализующую этот функционал на линухе. Мне сугубо всё равно что оно творит "унутре" себя на винде пока я могу просто скомпилировать исходник своего приложения и получить тот же результат. PS: В случае с критической секцией выше мне просто пока лень разбираться с футексами чтобы эмулировать busy wait. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:25 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А был-ли бенчмарк который сравнивает вот эти две реализации? На коротких потоках (от 100-200мс). Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:26 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
maytonА был-ли бенчмарк который сравнивает вот эти две реализации? Не было. В моём приложении нет коротких потоков. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:30 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А был-ли бенчмарк который сравнивает вот эти две реализации? На коротких потоках (от 100-200мс). Код: plaintext 1. 2. 3. 4. 5. 6. 7.
А что означает «короткий поток»? Время жизни потока небольшое? Странная терминология. И как от времени жизни потока может зависеть время блокирования мьютекса? Теоретически, в определённых ситуация критическая секция выигрывает, потому что в начале использует спин лок. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 16:36 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Ну да. Про 200 мс это я конечно загнул. Надо чтоб поток хоть какую-то полезную задачу сделал. Ну вобщем вопрос был в части энерго-эффективности EnterCriticalSection, особенно когда попыток много на единицу времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 17:30 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
maytonНу вобщем вопрос был в части энерго-эффективности EnterCriticalSection, особенно когда попыток много на единицу времени. Да, именно для этого в линухе футексы и комментарий в моём исходнике. Когда придёт время для оптимизации - буду копаться. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 17:59 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А был-ли бенчмарк который сравнивает вот эти две реализации? На коротких потоках (от 100-200мс). Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Если не путаю линуксовый мутекс не тоже самое что виндовый мутекс, он менее функционален, его в другой процесс не передашь. Поэтому он по реализации ближе к критической сессии, может блокироваться без переключения в режим ядра, за счет этого быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 19:39 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
petrav Уткъ Да, я его тоже использую, вот так: Код: plaintext 1.
Это С++ конструкция такая или Си? Си конечно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 20:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
В общем есть проблема. Под линукс все нормально скопилирвалось и работает. Под виндоус скомпилировалось, но при запуске: не удалось продолжить выполнение кода поскольку система не обнаружила LIBPQ.dll При попытке зарегистрировать библиотеку: regsvr32 "C:\Program Files\PostgreSQL\11\lib\libpq.dll" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 20:45 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Это я рано радовался то компилиться ))) Подскажите пожалуйста, как на windows обойти эту проблему с библиотекой? Она существует по указанному пути, более того она используется постгрессом. А Си ее не признает (( ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 20:47 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я задаол этот вопрос в форуме по постгрессу днем, но там посоветовали тут спросить: Maxim Boguk Уткъ мож как-то связано х32 и х64 ? Не то чтобы вам никто не хочет отвечать но этот вопрос уже совсем оффтопик на этом форуме и просто специалистов нет. Я последний раз что то под винду 22 года назад собирал. Вам бы в сишный форум обратиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 20:48 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ не удалось продолжить выполнение кода поскольку система не обнаружила LIBPQ.dll При попытке зарегистрировать библиотеку: regsvr32 "C:\Program Files\PostgreSQL\11\lib\libpq.dll" ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 21:08 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
bk0010 Уткъ не удалось продолжить выполнение кода поскольку система не обнаружила LIBPQ.dll При попытке зарегистрировать библиотеку: regsvr32 "C:\Program Files\PostgreSQL\11\lib\libpq.dll" Сейчас попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 21:11 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
bk0010, Спасибо, есть продвижения! Теперь жалуется на отсутсвие нескольких других dll libssl-1_1-x64.dll libcrypto-1_1-x64.dll libintl-9.dll Попробую их поискать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 21:31 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ bk0010, Спасибо, есть продвижения! Теперь жалуется на отсутсвие нескольких других dll libssl-1_1-x64.dll libcrypto-1_1-x64.dll libintl-9.dll Попробую их поискать. Есть просто Код: plaintext 1. 2. 3.
Без указания версии. И не ddl, а lib. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 21:33 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Друзья. Давайте без ёрничания. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 22:45 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Проблема решилась добавлением в PATH другого каталога, а lib убрал. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 23:29 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Компилируется нормально, без ошибок а при запуске просто падает, вот с такой ошибкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 23:31 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
я так понимаю это типа segmentation falls, только для виндоус... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.02.2022, 23:32 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ я так понимаю это типа segmentation falls, только для виндоус... Да, оно. Подозреваю какой-нибудь вызов библиотеки вернул ошибку, ты ее не проверил и на следующем шаге вылетел. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 07:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ я так понимаю это типа segmentation falls, только для виндоус... Да, оно. Подозреваю какой-нибудь вызов библиотеки вернул ошибку, ты ее не проверил и на следующем шаге вылетел. все проще. это антивирус. видно по логу касперского. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 08:17 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Dima T пропущено... Да, оно. Подозреваю какой-нибудь вызов библиотеки вернул ошибку, ты ее не проверил и на следующем шаге вылетел. все проще. это антивирус. видно по логу касперского. Трояны пишешь ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 13:35 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А что было в логах от антивируса? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 14:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А что было в логах от антивируса? Позрение на XXX где XXX это условное название какого-то абстрактного трояна. Устал бороться с этим. Прога лезет в инет - троян. Каспер-интернет-секьюрити самый жопский антивирус, даже добавление в исключения не помогает (( ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 19:46 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А как вообще можно на Windows-машине разрабатывать на С++ сетевые приложухи в условиях что антивирус все таки тоже должен работать? Это не к автору вопрос а вообще всем. Поделитесь опытом. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 19:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А как вообще можно на Windows-машине разрабатывать на С++ сетевые приложухи в условиях что антивирус все таки тоже должен работать? Это не к автору вопрос а вообще всем. Поделитесь опытом. Адекватные антивирусы исключения не проверяют. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 20:10 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А как вообще можно на Windows-машине разрабатывать на С++ сетевые приложухи в условиях что антивирус все таки тоже должен работать? Это не к автору вопрос а вообще всем. Поделитесь опытом. Например: https://support.microsoft.com/ru-ru/windows/добавление-исключения-в-систему-безопасность-windows-811816c0-4dfd-af4a-47e4-c301afe13b26#:~:text=Выберите Пуск > Параметры > Обновление и,нажмите Добавление или удаление исключений. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.02.2022, 21:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
нормально все у KIS добавляю в доверенные exe шник, ставлю все галки - не следить за дочерним не проверять открываемые не ограничивать родительские процессы и т.д ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 02:46 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ пропущено... все проще. это антивирус. видно по логу касперского. Трояны пишешь Нет, просто конкретная строка где идет прогрузка данных вызывала сбой программы. Причем, если эту строку закомментировать, то антивирус не паникует. Но в этой строке весь смысл. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 03:28 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton А что было в логах от антивируса? В логах касперского: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Я вообще об антивирусе без мата с трудом могу говорить :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 03:31 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Мне было просто интересно какое действие Касперский посчитал вредоносным. Открытие сетевого сокета наружу? Или просто ты полез в память чужих процессов? Это просто было-бы полезно тебе знать для дальшейшей разработки. А мат тут не нужен. Антивирус просто делает свою работу. Или быть может у тебя есть советы к антивирусу как ему различать твою полезную прогу от какого-нибудь бэкдора. Просто когда ты займешся дистрибуцией своей утилиты - теже проблемы возникнут на хостах и их надо как-то единообразно фиксить. Список файловых исключений - вариант. А может не только это вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:51 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton, Как бы отлаживаться надо не на проде, а на локальном тестовом серваке прст =) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 11:59 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Мне было просто интересно какое действие Касперский посчитал вредоносным. Открытие сетевого сокета наружу? Думаю да, там был забор данных с другого сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 12:40 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткътам был забор данных с другого сервера. Требующий остановки других приложений, ага... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 13:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Уткътам был забор данных с другого сервера. Требующий остановки других приложений, ага... Поясните. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А, извиняюсь, невнимательно прочёл логи, не заметил, что первая запись относится к WER. Падение твоей программы не имеет ничего общего с аантивирусом. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:49 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov А, извиняюсь, невнимательно прочёл логи, не заметил, что первая запись относится к WER. Падение твоей программы не имеет ничего общего с аантивирусом. эээ...... а к чему имеет? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 14:52 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъа к чему имеет? К багу в ней. Запускай под отладчиком, смотри call stack при падении. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.02.2022, 15:18 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Уткъа к чему имеет? К багу в ней. Запускай под отладчиком, смотри call stack при падении. Сомневаюсь, т.к. в программе для теста оставил 3 строчки. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 12:50 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Коллеги, добрый день. Пытаюсь забить программу на несколько файлов. Надо объявить структуру чтобы она была доступна во всех частях программы (разные файлы) Было вот так: main.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
header.h Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 12:53 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
выношу в header: header.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
в main остается: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
И нормально работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 12:59 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
но как только дописываю extern к определению структуры в header.h Код: plaintext 1. 2. 3. 4.
возникает ошибка: data_control.h:22:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘struct’ exterm struct pair { Подскажите пожалуйста как правильно определить структуру в заголовочном файле, и главном чтобы она была доступна из любого другого файла проекта? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ И нормально работает. Почему оно не должно работать? Оба варианта верны. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ И нормально работает. Почему оно не должно работать? Оба варианта верны. А с точки зрения доступность из других файлов, это нормальный вариант, без extern ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:04 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ но как только дописываю extern к определению структуры в header.h Код: plaintext 1. 2. 3. 4.
возникает ошибка: data_control.h:22:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘struct’ exterm struct pair { Подскажите пожалуйста как правильно определить структуру в заголовочном файле, и главном чтобы она была доступна из любого другого файла проекта? extern убери, он у тебя лишний. extern обозначает что искать объявление в другом месте. PS Ты бы книжку какую почитал, это азы. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:04 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ но как только дописываю extern к определению структуры в header.h Код: plaintext 1. 2. 3. 4.
возникает ошибка: data_control.h:22:8: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘struct’ exterm struct pair { Подскажите пожалуйста как правильно определить структуру в заголовочном файле, и главном чтобы она была доступна из любого другого файла проекта? extern убери, он у тебя лишний. extern обозначает что искать объявление в другом месте. PS Ты бы книжку какую почитал, это азы. Я просто про переменные читал, что их надо extern делать. Ну читать еще и читать ))) Большое спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:06 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
В начале каждого .h файла ставь Код: plaintext 1.
это чтобы препроцессор дважды не включил твой .h И про препроцессор почитай ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:07 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T В начале каждого .h файла ставь Код: plaintext 1.
это чтобы препроцессор дважды не включил твой .h И про препроцессор почитай включил. читаю :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:16 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
УткъСомневаюсь, т.к. в программе для теста оставил 3 строчки. Багу достаточно одной. Трёх - мало для осмысленного функционирования программы, работающей с БД. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:21 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T, еще такой вопрос, тестирую сколько памяти может выделиться для структуры: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Если ставлю в 1000000 раз больше, то память не выделяется: Код: plaintext 1.
Но это же не обльше чем память на сервере, на сервере 8 Гб доступно, а они не выделяются. Я так понимаю это идет занятие памяти стека, а она маленькая. Подскажите пожалуйста как воспользоваться не памятью стека при выделении, а общей памятью на сервере? Ну или я что-то путаю ( ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:24 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Ты не указал какой битности у тебя код. Будем считать что x64, тогда sizeof(struct pair) = 16 байт, и всего Код: plaintext 1.
24 Гб свободной памяти у тебя просто нет, как минимум поэтому не дает выделить столько памяти. В 32-битных было просто, адресное пространство процесса позволяет выделить максимум 1.7 Гб, и они выделялись даже если памяти не хватало, остальное свопилось. В x64 адресное пространство не ограничивает, поэтому придуманы какие-то хитрые алгоритмы искусственного ограничения, т.к. одна кривая прога запросто может занять всю память и своп в придачу. Какие ограничения, как их обходить, я не вникал, в каждой ОС свои правила. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:37 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Вместо ip можно поставить беззнаковое целое число. Код: plaintext 1. 2. 3. 4.
Это сэкономит память. Есть формулы трансляции из строк типа "192.168.0.1" в целые числа и обратно. Но мне кажется что тебе не стоит сразу кушать слона. Поработай хотя-бы с 1000 штук таких пар. Отшлифуй просто корректную работу. А уже потом - растягивай до мильярдов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:45 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
УткъНу или я что-то путаю ( Ты, как и в остатке топика, путаешь всё. Абсолютно всё. Вследствие хронического незнания азов функционирования компьютера. Даже если бы sizeof(pair) было 1 байт, то ты пытался бы выделить 1500000000 байт. Что, внезапно, полтора гигабайта. У тебя pair - 16 байт. Простая арифметика и вуаля - мы видим попытку выделить 24 гигабайта при доступных восьми. Но, как верно упомянул тёзка, тебе мог бы прийти на помощь своп. Если бы ты не пытался скомпилировать 32-х разрядное приложение, где sizeof(pair) - 8 байт. Что сокращает потуги до 12 гигабайт при максимально доступном адресном пространстве в четыре (практически не более двух, максимум трёх). Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 13:54 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Ты не указал какой битности у тебя код. Будем считать что x64, тогда sizeof(struct pair) = 16 байт, и всего Код: plaintext 1.
24 Гб свободной памяти у тебя просто нет, как минимум поэтому не дает выделить столько памяти. В 32-битных было просто, адресное пространство процесса позволяет выделить максимум 1.7 Гб, и они выделялись даже если памяти не хватало, остальное свопилось. В x64 адресное пространство не ограничивает, поэтому придуманы какие-то хитрые алгоритмы искусственного ограничения, т.к. одна кривая прога запросто может занять всю память и своп в придачу. Какие ограничения, как их обходить, я не вникал, в каждой ОС свои правила. Ого, я не думал что прям 24 гига.... просто я не успевал даже top запустить - мнгновенно ошибка была, думал несколько мегабайт пытается взять... Спасибо за разьяснение. Раз вся память доступна - это хорошо! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 14:02 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov УткъНу или я что-то путаю ( Ты, как и в остатке топика, путаешь всё. Абсолютно всё. Вследствие хронического незнания азов функционирования компьютера. Даже если бы sizeof(pair) было 1 байт, то ты пытался бы выделить 1500000000 байт. Что, внезапно, полтора гигабайта. У тебя pair - 16 байт. Простая арифметика и вуаля - мы видим попытку выделить 24 гигабайта при доступных восьми. Но, как верно упомянул тёзка, тебе мог бы прийти на помощь своп. Если бы ты не пытался скомпилировать 32-х разрядное приложение, где sizeof(pair) - 8 байт. Что сокращает потуги до 12 гигабайт при максимально доступном адресном пространстве в четыре (практически не более двух, максимум трёх). я немного туповат просто ( прошу принять это и простить. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 14:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Вместо ip можно поставить беззнаковое целое число. Код: plaintext 1. 2. 3. 4.
Это сэкономит память. Есть формулы трансляции из строк типа "192.168.0.1" в целые числа и обратно. Но мне кажется что тебе не стоит сразу кушать слона. Поработай хотя-бы с 1000 штук таких пар. Отшлифуй просто корректную работу. А уже потом - растягивай до мильярдов. Да, сначала надо сделать все просто, потому уже оптимизировать, когда будет что оптимизировать ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 14:03 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Как будет угодно. Вот потом почитай https://docs.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_pton ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 14:10 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
А потом ещё можно почитать про getaddrinfo() и IPv6. И выкинуть всю эту массивную фигню чуть более чем целиком, потому что для задачи она не нужна. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 14:16 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Непонятная ситуация: вот файл header.h Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Создал функцию в отдельном файле: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
При компиляции пишет: error: expected declaration specifiers before ‘printf’ printf("здравствуй, мир\n"); Как буд-то Код: plaintext 1.
не прописан в новом файле. Но он же должен подтягиваться из заголовочного файла строчкой: Код: plaintext 1.
А почему не подтягивается? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 15:30 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Тут какая-то фигня. Bracer не в ту сторону. Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Ты в среде разработки пишешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 15:32 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Тут какая-то фигня. Bracer не в ту сторону. Ты в среде разработки пишешь? А вот оно в чем дело... Поменял на { - все скомпилировалось! Спасибо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 15:52 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Ты в среде разработки пишешь? не, я в блокноте пишу. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 15:52 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ mayton Ты в среде разработки пишешь? не, я в блокноте пишу. вижуал студию поставь, писать научишься - продолжишь в блокноте ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 20:17 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Я начинал с Borland C++ под DOS но я не помню была ли там подсветка парных bracers? Кто помнит? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 21:15 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Я начинал с Borland C++ под DOS но я не помню была ли там подсветка парных bracers? Кто помнит? Впрочем, она появилась довольно давно - в lisp-машинах, и кажется еще в 80-х. Но точно, не уверен. Я сам ей пользоваться начал только в начале века, в FAR. Когда colorer набрал популярность. А потом и всяческие IDE подтянулись. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.02.2022, 23:47 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Я сам ей пользоваться начал только в начале века, в FAR. Когда colorer набрал популярность. Нынче colorer по умолчанию с Far ставится. Еще есть notepad++, там тоже подсветка синтаксиса. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.02.2022, 08:12 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Доброе утро. Столкнулся с непонятной ситуацией. Заменил тип в структуре с char* на int и память для ячейки структуры перестала выделяться. Вот такая структура и массив из структур: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Было так на i-м шаге в цикле: Код: plaintext 1.
Стало так: Код: plaintext 1.
Ошибка вот такая: warning: cast from pointer to integer of different size Но когда полностью убрал выделение памяти - скомпилировалось и работает. Скажите, это нормально, не выделять память для int в массиве структур? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 11:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Под примитивные типы не надо выделять память. Они уже есть в структуре как ее часть. Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 12:04 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Под примитивные типы не надо выделять память. Они уже есть в структуре как ее часть. Код: plaintext 1.
Получается под char тоже не надо, только под char* Понял, спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 12:44 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Попробуй нарисуй на бумажке как ты себе представляешь память в виде дампа и где в ней лежит твой массив структур и выделенные строки. Где указатели. Какова их разрядность. Где padding. Это очень быстро освежает мозг и позволяет сразу другим наблюдателям понять где ты ошибаешся и где что не так. Иначе заблуждения пойдут далеко. Я так делал когда был студентом и изучал Borland C++. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 12:48 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Ошибка вот такая: warning: cast from pointer to integer of different size Но когда полностью убрал выделение памяти - скомпилировалось и работает. Скажите, это нормально, не выделять память для int в массиве структур? Ты утечку памяти устроил, компилятор об этом предупредил. Если у тебя указатель (тип со звездочкой*), то это адрес в памяти где лежат данные этого типа (или массив). Без звездочки (не указатель) это уже выделенное место в памяти под переменную данного типа. Т.е. если у тебя тип int, то дополнительно ничего выделять не надо. Указатель это тоже переменная, под нее тоже сразу выделяется память (8 байт в x64) и в эту память пишется адрес на который указывает указатель, т.е. тот адрес который вернет malloc() в твоем коде. PS Про указатели почитай https://metanit.com/cpp/c/5.1.php ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 12:50 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton, Dima T, впитываю информацию, спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2022, 13:33 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Доброе утро. Появилась вот такая проблема: в строку Код: plaintext 1.
попадает значение из функции Код: plaintext 1.
типа: Код: plaintext 1.
А потом я пытаюсь это вставить в sql запрос и выпадает ошибка: что строка содержит символ, не соответствующий utf-8 пытался обрезать строку до одного символа: Код: plaintext 1.
о там получается 1 нормльный символ, а потом еще како-то спецсимвол и такая же ошибка с utf-8 Подскажите пожалуйста как привести строку в соответствие с utf-8 ? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.03.2022, 10:46 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Доброе утро. Появилась вот такая проблема: в строку Код: plaintext 1.
попадает значение из функции Код: plaintext 1.
типа: Код: plaintext 1.
А потом я пытаюсь это вставить в sql запрос и выпадает ошибка: что строка содержит символ, не соответствующий utf-8 пытался обрезать строку до одного символа: Код: plaintext 1.
о там получается 1 нормльный символ, а потом еще како-то спецсимвол и такая же ошибка с utf-8 Подскажите пожалуйста как привести строку в соответствие с utf-8 ? Думаю посимвольно строку перебрать и оставить только те символы, которые к utf-8 относятся. Но как понять относится символ к utf-8 или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 11:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Покажи код. Декодировать вручную utf-8 не нужно. Что-то выше по коду было не так. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 11:56 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Покажи код. Декодировать вручную utf-8 не нужно. Что-то выше по коду было не так. Тут дело такое. Весь код довольно большой и слабочитаемый, тем более там специфическая библиотека. Особо нет смысла его приводить. Код устроен так: 1) в char* переменную считывается сообщение об ошибке из функции libpq - PQerrorMessage(). 2) это сообщение содержит руские буквы и спецсимволы. 3) формирую запрос на INSERT в БД. И в него через strcat() вставляю это сообщение. 4) ошибка об utf-8 именно от БД postgresql , её не Си выдает. Получается, если сообщение об ошибке на английском - INSERT в БД проходит без проблем. Если на русском, то он не проходит и программа работает дальше, просто нет записи в БД. Надеюсь передал суть проблемы ) Задача: обработать эту переменную со спецсимволами, убрав их. Оставить только символы, которые есть в utf-8 ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 12:09 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Попробуй в строке коннекта явно указать кодировку Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 12:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Задача: обработать эту переменную со спецсимволами, убрав их. Оставить только символы, которые есть в utf-8 Все символы с кодами от 32 до 127 одинаковы в кодировке ANSI и UTF-8, остальные убрать можно так: Код: plaintext 1. 2. 3.
но так ты все русские буквы на вопросики заменишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 12:48 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Задача: обработать эту переменную со спецсимволами, убрав их. Оставить только символы, которые есть в utf-8 Все символы с кодами от 32 до 127 одинаковы в кодировке ANSI и UTF-8, остальные убрать можно так: Код: plaintext 1. 2. 3.
но так ты все русские буквы на вопросики заменишь. Вопросики - не страшно. Это похоже то что нужно. Спасибо :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 13:56 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton Попробуй в строке коннекта явно указать кодировку Код: plaintext 1.
Спасибо, проверю отпишусь. Сейчас просто не за компом. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 13:57 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Задача: обработать эту переменную со спецсимволами, убрав их. Оставить только символы, которые есть в utf-8 Все символы с кодами от 32 до 127 одинаковы в кодировке ANSI и UTF-8, остальные убрать можно так: Код: plaintext 1. 2. 3.
но так ты все русские буквы на вопросики заменишь. Ура, сработало! Правда немного изменил: Код: plaintext 1. 2. 3. 4. 5. 6.
Большое спасибо! Чуть позднее еще с кодировкой попробую. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 14:57 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Правда немного изменил: Код: plaintext 1. 2. 3. 4. 5. 6.
Компилятор на такое, кстати, ругаться должен. Ты эту ругань проигнорировал? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 15:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Правда немного изменил: Код: plaintext 1. 2. 3. 4. 5. 6.
Большое спасибо! Чуть позднее еще с кодировкой попробую. Ничего что ты утечку памяти устроил? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 15:00 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
White Owl Уткъ Правда немного изменил: Код: plaintext 1. 2. 3. 4. 5. 6.
Компилятор на такое, кстати, ругаться должен. Ты эту ругань проигнорировал? А из-за чего утечка? компилятор молчал... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 22:19 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ Правда немного изменил: Код: plaintext 1. 2. 3. 4. 5. 6.
Большое спасибо! Чуть позднее еще с кодировкой попробую. Ничего что ты утечку памяти устроил? Даже не представляю как правильно для нее free() сделать... думал после цикла где-нить. А как ее освободить чтобы она не утекала? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2022, 22:20 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
free нужно делать в момент когда память тебе уже не нужна. Где конкретно в твоем код - это нам не ведомо. Ты-же хитрец. Всё не показал. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 00:22 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Уткъ Dima T пропущено... Ничего что ты утечку памяти устроил? Даже не представляю как правильно для нее free() сделать... думал после цикла где-нить. А как ее освободить чтобы она не утекала? Как ты ее освободишь после цикла если ты указатель совсем в другое место направил? Код: plaintext 1.
Ты потерял адрес, по которому была выделена память. И начинать надо с того зачем ты вообще память выделял? Подозреваю просто из-за собственной глупости. Забыл что тебе лень книжки читать, так лучше напиши, без указателей Код: plaintext 1. 2. 3.
результат будет такой же 22440612 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 07:25 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima T Уткъ пропущено... Даже не представляю как правильно для нее free() сделать... думал после цикла где-нить. А как ее освободить чтобы она не утекала? Как ты ее освободишь после цикла если ты указатель совсем в другое место направил? Код: plaintext 1.
Ты потерял адрес, по которому была выделена память. И начинать надо с того зачем ты вообще память выделял? Подозреваю просто из-за собственной глупости. Забыл что тебе лень книжки читать, так лучше напиши, без указателей Код: plaintext 1. 2. 3.
результат будет такой же 22440612 Так даже понятнее :-) Да, это моя собственная глупость, мож через какое-то время чуток поумнею ) Спасибо за решение ) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 11:42 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
mayton free нужно делать в момент когда память тебе уже не нужна. Где конкретно в твоем код - это нам не ведомо. Ты-же хитрец. Всё не показал. Да, я просто в конце ее освождаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 11:43 |
|
Си. Освободить память 2-мерного сторкового массива
|
|||
---|---|---|---|
#18+
Dima TИ начинать надо с того зачем ты вообще память выделял? Потому что он считает malloc() магическим заклинанием без которого переменные работать не могут. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.03.2022, 14:22 |
|
|
start [/forum/topic.php?all=1&fid=57&tid=2017122]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
228ms |
get tp. blocked users: |
2ms |
others: | 262ms |
total: | 568ms |
0 / 0 |