Как я узнаю, сколько свободной памяти оставляют в GNU C++ на Linux

Проблема в том, как вы передаете опору, которая имеет форму струны. Вместо этого вам нужно написать

<Table usersList={test} />

Как только вы сделаете вышеуказанные изменения, вы можете просто получить доступ к элементам массива, сопоставив реквизиты, как

this.props.usersList.map(...)
6
задан 24 December 2008 в 10:11
поделиться

7 ответов

Вероятно, можно создать собственное новое и удалить функции, который инкапсулирует реальные новые и операторы delete, и примите во внимание использование памяти одновременно.

Для стека существует прием в C, где Вы смотрите на адрес первой локальной переменной, определенной в Вашей текущей функции для получения общего представления о том, где указатель вершины стека в данный момент. Я предполагаю, что это должно работать в C++, но не попробовало его.

2
ответ дан 17 December 2019 в 04:53
поделиться

Знайте, что в 32-разрядных системах, стек растет вниз, и "куча" растет вверх, и эти два могли бы встретиться где-нибудь в середине. Место могло бы, поэтому, быть выделено к стеку или к "куче", но не обоим одновременно. Обратите внимание, что сегменты общей памяти (при использовании их) усложняют карту распределения памяти. Так могут динамично загруженные (совместно использованные) библиотеки.

+------------+
|    stack   | high addresses
|      |     |
|      v     |
+------------+
|            |
|   unused   |
|            |
+------------+
|            |
|      ^     |
|      |     |
|    heap    |
|            |
+------------+
|            |
|     bss    |
|            |
+------------+
|            |
|    data    |
|            |
+------------+
|            |
|    text    |
|            | low addresses
+------------+

В 64-разрядной системе существует достаточно адресного пространства, что Вы выбегаете реальная память и виртуальная память, прежде чем коллизии произойдут.

Кроме того, обратите внимание, что (по крайней мере некоторые версии) Linux готов сказать, что больше памяти может быть выделено, чем они могут на самом деле поддерживать - они принимают на себя непосильные обязательства. Это не очень хорошо. Это означает, что практические эксперименты как испытательные выделения памяти могут дать Вам ложное чувство защищенности.

Скорее всего, Вы являетесь лучшими от выяснения, 'x МБ (ГБ?) пространства, оставленного', а не, 'сколько МБ (ГБ?) пространства оставлен'. Другие люди, на которых указывают /proc файловая система как источник информации для того, сколько памяти используется. Я не уверен, говорит ли это надежно Вам о том, сколько памяти доступно захвату.

1
ответ дан 17 December 2019 в 04:53
поделиться

на Linux можно считать/proc/pid/ состояние

1
ответ дан 17 December 2019 в 04:53
поделиться

Можно зарегистрироваться в/proc пространстве имен файлы/proc / <pid>/smaps и/proc / <pid> / карты, где <pid> является идентификатором текущего процесса.

Проверьте это сообщение в блоге.

0
ответ дан 17 December 2019 в 04:53
поделиться

Инструмент Massif Valgrind поддерживает и стек и профилирование "кучи". Можно хотеть проверить его исходный код, чтобы видеть, как он делает это.

0
ответ дан 17 December 2019 в 04:53
поделиться

getrlimit с параматерью RLIMIT_STACK скажет Вам, сколько стековое пространство там всего. С параметром RLIMIT_AS можно узнать, сколько там виртуальная память.

Для получения дополнительной информации взгляд на http://linux.die.net/man/2/getrlimit

0
ответ дан 17 December 2019 в 04:53
поделиться

Для части "кучи" возможно, Вы поражаете предел ресурса. Проверьте это.

Можно ли использовать Valgrind для профилирования стека, но что Вы собираетесь сделать с ним? Стек не похож на "кучу". Вы говорите, Вы хотите сделать это для отладки целей. Если Ваши прекрасные прогоны программы, то нет никакой проблемы стека (связана со своим размером, по крайней мере).

Можно установить размер стека для потоков, которые Вы создали, и осмотрите значение указателя вершины стека путем рассмотрения локальной переменной (который не должен быть оптимизирован), адреса. Просто сделайте некоторую математику при помощи начального размера, начального значения указателя вершины стека и текущего значения указателя вершины стека, Вы получите некоторые хорошие числа. Просто не забывайте узнавать направление стека сначала. Это может измениться от платформы до платформы.

Я думаю, заботитесь ли Вы об этом очень для использования "кучи", затем Ваша программа, вероятно, пропускает память. В этом случае Valgrind может указать на Вас на правильное направление. Valgrind

0
ответ дан 17 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: