<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913068</guid>
        <pubDate>Tue, 12 Nov 2024 06:22:05 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913068</link>
        <description><![CDATA[Majestio: Всем спасибо. <strong class='tag-b'>Qraizer</strong>, отдельный респект за тесты и пример. Я так понимаю, что Стандарт этим не занимается. Но и в этом вижу профит - не указывает, но и не ограничивает. Значит будем посмотреть в компиляторах.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913057</guid>
        <pubDate>Mon, 11 Nov 2024 21:02:02 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913057</link>
        <description><![CDATA[Qraizer: Любой контейнер имеет метод max_sixe(), но по Стандарту он ограничивает потенциал контейнера, т.е. без учёта фактических ограничений исполнительной подсистемы. И вообще-то это логично, т.к. последний зависит от многих факторов, выходящих за рамки Стандарта. Фактический же не имеет чёткой границы. Вот надо тебе только то, что умещается в памяти или же ты согласен на своп. Если согласен, то до какой степени. На HDD у тебя будут одни предпочтения, на SDD ты можешь себе позволить больше свопа, и ещё больше, если не SATA, а NVMe. Итп. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-11T21:20:54+00:00">11.11.24, 21:20</time></span></span><br>
Я как-то использовал такой код на WinAPI. Сорри, без комментов. Пользуйся, если надо.<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">template &#60;typename T&#62;</div><div class="code_line">size_t getOptimizedSize()</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;if constexpr (sizeof(void*) &#62; 4)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;size_t size &nbsp; &nbsp;= std::numeric_limits&#60;decltype(size)&#62;::max(),</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; oldSize = size;</div><div class="code_line">&nbsp;&nbsp; &nbsp;void &nbsp;*mem;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;mem = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (mem == NULL)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;oldSize = size;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;size &nbsp;&#62;&#62;= 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;size_t newSize = (oldSize &#62;&#62; 1) + (size &#62;&#62; 1);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;oldSize = size;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;size &nbsp; &nbsp;= newSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;VirtualFree(mem, 0, MEM_RELEASE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;} while (size != oldSize);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;size_t allocated = size;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;mem = VirtualAlloc(NULL, size, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (mem == NULL) throw std::runtime_error(&quot;Ops!&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Allocated &quot; &#60;&#60; size &#60;&#60; &quot; bytes&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (SetProcessWorkingSetSize(GetCurrentProcess(), size, size) == FALSE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;oldSize = size;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;size &nbsp;&#62;&#62;= 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;size_t newSize = (oldSize &#62;&#62; 1) + (size &#62;&#62; 1);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;oldSize = size;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;size &nbsp; &nbsp;= newSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp;} while (size != oldSize);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (SetProcessWorkingSetSize(GetCurrentProcess(), size, size) == FALSE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;throw std::runtime_error(&quot;Ops 2!&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Residented &quot; &#60;&#60; size &#60;&#60; &quot; bytes&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;do</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if (VirtualLock(mem, size) == FALSE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;oldSize = size;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;size &nbsp;&#62;&#62;= 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;continue;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;size_t newSize = (oldSize &#62;&#62; 1) + (size &#62;&#62; 1);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;oldSize = size;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;size &nbsp; &nbsp;= newSize;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;VirtualUnlock(mem, oldSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp;} while (size != oldSize);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;if (VirtualLock(mem, size) == FALSE)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;throw std::runtime_error(&quot;Ops 3!&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Locked &quot; &#60;&#60; size &#60;&#60; &quot; bytes&quot; &#60;&#60; std::endl;</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;SetProcessWorkingSetSize(GetCurrentProcess(), size, size);</div><div class="code_line">&nbsp;&nbsp; &nbsp;VirtualFree((char*)mem + size, allocated - size, MEM_DECOMMIT);</div><div class="code_line">&nbsp;&nbsp; </div><div class="code_line">&nbsp;&nbsp; &nbsp;std::cout &#60;&#60; &quot;Ok&quot; &#60;&#60; std::endl; &nbsp; &nbsp; &nbsp; // &#60;- тут бряк</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;VirtualUnlock(mem, oldSize);</div><div class="code_line">&nbsp;&nbsp; &nbsp;SetProcessWorkingSetSize(GetCurrentProcess(), -1, -1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;VirtualFree(mem, 0, MEM_RELEASE);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;return size / sizeof(T);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;&nbsp;return std::numeric_limits&#60;size_t&#62;::max() / sizeof(T);</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script>Костыли местами, но в нынешних реалиях приемлемые. Тут предполагается, что в 32-битном окружении памяти достаточно для максимального количества элементов, а для 64-битных подсчитывается, исходя их реалий на текущий момент, предполагая, чтобы свопов не было. Сначала пробуем max, который наверняка не получится, поэтому постепенно, до успеха, уменьшается вдвое. Затем дихотомией увеличивается между успешным и предшествующием ему неуспешным. Эта память будет включать своп. Затем пробуем поднять предел рабочего пространства процесса до предела, ограниченного, например, администратором. Ну или там контроллером домена, например, неважно. Алгоритм аналогичный. Обычно он гораздо меньше только что вычисленного до этого, и в теории не должен свопиться, но только как рекомендация. На практике, если вдруг ОСи внезапно что-то сфорсмажорит, свопнуться сможет. Наконец пробуем залочить регион, отключая т.с. своп полностью. И тем же алгоритмом. В итоге размер памяти будет если не максимально возможным, то близко к этому, т.к. в процессе лока ОСь будет пытаться выгрузить из памяти всё ненужное, за исключением чего-то там на её усмотрение для обеспечения тех же самых форсмажоров. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-11T21:27:19+00:00">11.11.24, 21:27</time></span></span><br>
Запуск на домашней тачке (32Г RAM + NVMe) выдал:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Allocated 91625968979 bytes</div><div class="code_line">Residented 22906492243 bytes</div><div class="code_line">Locked 15270994816 bytes</div><div class="code_line">Ok</div></ol></div></div></div></div>Всего максимум памяти 90Гб, из них размер рабочего пространства почти 23, и наконец гарантировано несвопируемого 15. До запуска память была забита на 68%, после запуска на 30%. Процесс лока занял порядка 20 секунд. Причём после Ok я там добавил ожидание перед освобождением и выходом, и во время этой паузы система оставалась более чем отзывчивой. Win10Pro. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-11T21:34:41+00:00">11.11.24, 21:34</time></span></span><br>
P.S. Прикольно, но если во время пауз позапускать ещё копии, то вот результаты последовательных запусков, пока предыдущие всё ещё удерживают свои залоченные регионы:<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Allocated 68719476733 bytes</div><div class="code_line">Residented 6442450941 bytes</div><div class="code_line">Locked 4294967291 bytes</div></ol></div></div></div></div><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Allocated 68719476733 bytes</div><div class="code_line">Residented 1610612733 bytes</div><div class="code_line">Locked 1073741819 bytes</div></ol></div></div></div></div><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Allocated 68719476733 bytes</div><div class="code_line">Residented 536870909 bytes</div><div class="code_line">Locked 357913937 bytes</div></ol></div></div></div></div>Ну итп. Т.е. ОСь всё ещё оставляет память на форсмажоры и всё ещё более чем отзывчива. После 10 запусков физическая память занята на 91%, запас прочный. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-11T21:36:56+00:00">11.11.24, 21:36</time></span></span><br>
Не думаю, что Стандарт тут чем бы там ни было мог бы помочь. Это уже не его сфера ответственности. После всех выходов память занята на 24%.]]></description>
        <author>Qraizer</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913056</guid>
        <pubDate>Mon, 11 Nov 2024 20:51:17 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913056</link>
        <description><![CDATA[Dushevny: <a class='tag-url' href='https://en.cppreference.com/w/c/types/size_t' target='_blank'>https://en.cppreference.com/w/c/types/size_t</a><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>size_t can store the maximum size of a theoretically possible object of any type (including array).<br>
<br>
size_t is commonly used for array indexing and loop counting. Programs that use other types, such as unsigned int, for array indexing may fail on, e.g. 64-bit systems when the index exceeds UINT_MAX or if it relies on 32-bit modular arithmetic.</div></div><br>
<br>
Соответственно, объект не может быть больше максимального значения size_t]]></description>
        <author>Dushevny</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913053</guid>
        <pubDate>Mon, 11 Nov 2024 18:37:46 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913053</link>
        <description><![CDATA[macomics: <a class='tag-url' href='https://learn.microsoft.com/ru-ru/windows/win32/api/psapi/nf-psapi-getprocessmemoryinfo' target='_blank'>https://learn.microsoft.com/ru-ru/windows/w...ocessmemoryinfo</a><br>
<br>
еще это<br>
<br>
<a class='tag-url' href='https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-globalmemorystatus' target='_blank'>https://learn.microsoft.com/en-us/windows/w...balmemorystatus</a> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-11T18:52:34+00:00">11.11.24, 18:52</time></span></span><br>
Кстати замечу. В 32-битном режиме физическая адресация (с PAE) возможна до 64 Гб (36 бит), но адресное пространство физически ограничено 32-битами (4 Гб) и как раз этим и был ограничен максимально возможный размер массива (4 Гб).]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913052</guid>
        <pubDate>Mon, 11 Nov 2024 18:34:37 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913052</link>
        <description><![CDATA[Majestio: Ну да, я наверное про это и говорил. Просто в WinAPI я мало-мало путаюсь. Судя по докам, если вызов неуспешный - возвращается NULL. Законный вопрос - а как узнать сколько я могу резервировать памяти так, чтобы эта функция отработала правильно?]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913051</guid>
        <pubDate>Mon, 11 Nov 2024 18:28:08 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913051</link>
        <description><![CDATA[macomics: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453140&view=findpost&p=3913049'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Majestio &#064; <time class="tag-quote__quoted-time" datetime="2024-11-11T17:59:52+00:00">11.11.24, 17:59</time></span><div class='quote '>Прочитай про mmap. Навскидку не скажу, но на 100% помню, что в Уиндофс есть схожий по функционалу механизм.</div></div><br>
Это просто WinAPI CreateFileMapping. Он же есть и в Linux<br>
<span class="b-attach" data-size="87785" data-hits="307" data-attach-id="66511" data-attach-post-id="0">
			<span class="b-attach__title"></span><a class='b-attach-link' href='https://forum.sources.ru/index.php?act=Attach&amp;type=post&amp;id=0&amp;attach_id=66511' title='Скачать файл' target='_blank'>__________________________20241111_222744.png</a> (, : 307)
		</span> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2024-11-11T18:33:08+00:00">11.11.24, 18:33</time></span></span><br>
Про 32-битный режим я могу сказать точно. На С можно было объявить массив размером в 4Гб (максимальный доступный объем адресов). А вот для 64-битных надо искать, но по идее ограничения тоже нету.]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913049</guid>
        <pubDate>Mon, 11 Nov 2024 17:59:52 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913049</link>
        <description><![CDATA[Majestio: <strong class='tag-b'>macomics</strong>, вся фишка в том, что всё в С/C++ должно и обязано соответствовать Стандартам. Это аксиома. Любой шаг вправо или влево - это ересь. Вот поэтому я и спрашиваю именно за стандарты в первую очередь.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=453140&view=findpost&p=3913048'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>macomics &#064; <time class="tag-quote__quoted-time" datetime="2024-11-11T17:53:09+00:00">11.11.24, 17:53</time></span><div class='quote '>И еще одна догадка. Как тогда работают сейчас нейросети (тот же ChatGPT). Это же по сути массивы на Гб, если не на Тб значений.</div></div><br>
Прочитай про <a class='tag-url' href='https://ru.wikipedia.org/wiki/Mmap' target='_blank'>mmap</a>. Навскидку не скажу, но на 100% помню, что в Уиндофс есть схожий по функционалу механизм.]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913048</guid>
        <pubDate>Mon, 11 Nov 2024 17:53:09 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913048</link>
        <description><![CDATA[macomics: Прочитал на cplusplsu.com про массивы и там ничего не сказано про тип индексов для элементов. Тогда нет ограничения для размеров массивов (хоть вся доступная память). Главное, чтобы ОС смогла для этого объекта найти достаточно свободных страниц памяти и они все разом влезли в RAM (т.к. объект будет загружаться полностью перед доступом).<br><br>И еще одна догадка. Как тогда работают сейчас нейросети (тот же ChatGPT). Это же по сути массивы на Гб, если не на Тб значений.]]></description>
        <author>macomics</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913047</guid>
        <pubDate>Mon, 11 Nov 2024 16:41:17 +0000</pubDate>
        <title>Ограничение по размерам данных</title>
        <link>https://forum.sources.ru/index.php?showtopic=453140&amp;view=findpost&amp;p=3913047</link>
        <description><![CDATA[Majestio: Всем привет&#33;<br>
<br>
Сразу хочу сказать - мой вопрос не практический, а чисто академический. Заранее прошу прощения за некоторую <a class='tag-url' href='https://ru.wikipedia.org/wiki/%D0%93%D0%B8%D0%BF%D0%B5%D1%80%D0%B1%D0%BE%D0%BB%D0%B0_(%D1%80%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%BA%D0%B0)' target='_blank'>гиперболизацию</a> в своих высказываниях, бикоз настроение хорошее. Понедельник, честно сказать, гуано полное. Но я всё порешал на высшем уровне. Я - кросава, и теперь с самому вопросу... Под такое настроение я решил выяснить, а могу ли я в качестве поля класса использовать массив размером в один <a class='tag-url' href='https://ru.wikipedia.org/wikipedia/en/A/Special:Search?title=%D0%97%D0%B5%D1%82%D1%82%D0%B0%D0%B1%D0%B0%D0%B9%D1%82' target='_blank'>зетабайт</a>? Как говорится &quot;чего уж мелочиться&quot;. Ну да, я тут немного перегнул. Поговорил с ChatGPT4, он мне выдал такую инфу:<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>В 64-разрядной системе теоретически максимальный объем адресуемой памяти составляет 16 эксабайт (16 ЭБ), что эквивалентно 2<sup class='tag-sup'>64</sup> байт. Однако на практике существуют ограничения, которые могут уменьшить этот объем:<br>
<br>
<ul class="tag-list"><li>Физические ограничения: Хотя архитектура 64 бита позволяет адресовать до 16 ЭБ, многие современные процессоры и операционные системы имеют ограничения на фактический объем поддерживаемой памяти. Например, большинство процессоров x86-64 используют 48-битные адреса, что ограничивает адресуемую память до 256 терабайт (ТБ).</li><li>Ограничения операционных систем: Разные операционные системы имеют свои собственные ограничения на максимальный объем поддерживаемой памяти. Например, Windows Server может поддерживать до 24 ТБ, а некоторые версии Linux могут поддерживать до 64 ТБ.</li></ul></div></div><br>
Но вот на второй мой вопрос к ChatGPT4, а-ля, &quot;А в Стандартах С/С++ есть какие либо ограничения или указания по максимально-допустимым размерам объектов?&quot; я ответ получил, типа &quot;такого нет&quot;.<br>
<br>
<strong class='tag-b'>Собственно вопросов несколько</strong><br>
<br>
1) &quot;Граничные условия&quot; - вестчь важная, она должна быть как-то регламентирована? Если да - то где и как?<br>
2) А если &quot;не&quot;, то как &quot;правильно быть&quot;?]]></description>
        <author>Majestio</author>
        <category>C/C++: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	