<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic [CRASH] new char[480MB] in ObjectARX Forum</title>
    <link>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435054#M25461</link>
    <description>When I attempt to allocate something about 480MB of memory AutoCAD crash &lt;BR /&gt;
with the following message "Runtime Error! The application has requested the &lt;BR /&gt;
Runtime to terminate it in an unusual way". So, my question, how to allocate &lt;BR /&gt;
a large block of memory by ObjectARX application?&lt;BR /&gt;
&lt;BR /&gt;
Thanks</description>
    <pubDate>Fri, 16 Sep 2005 22:02:06 GMT</pubDate>
    <dc:creator>Anonymous</dc:creator>
    <dc:date>2005-09-16T22:02:06Z</dc:date>
    <item>
      <title>[CRASH] new char[480MB]</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435054#M25461</link>
      <description>When I attempt to allocate something about 480MB of memory AutoCAD crash &lt;BR /&gt;
with the following message "Runtime Error! The application has requested the &lt;BR /&gt;
Runtime to terminate it in an unusual way". So, my question, how to allocate &lt;BR /&gt;
a large block of memory by ObjectARX application?&lt;BR /&gt;
&lt;BR /&gt;
Thanks</description>
      <pubDate>Fri, 16 Sep 2005 22:02:06 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435054#M25461</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2005-09-16T22:02:06Z</dc:date>
    </item>
    <item>
      <title>Re: [CRASH] new char[480MB]</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435055#M25462</link>
      <description>This is my working solution to work with big tables in case not enough &lt;BR /&gt;
contiguous memory.&lt;BR /&gt;
&lt;BR /&gt;
&lt;CODE&gt;&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* START: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
template&lt;CLASS t=""&gt;&lt;BR /&gt;
class HokusVector&lt;BR /&gt;
{&lt;BR /&gt;
&lt;BR /&gt;
// typedefs&lt;BR /&gt;
//&lt;BR /&gt;
&lt;BR /&gt;
public:&lt;BR /&gt;
typedef T Value;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// konstruktory / destruktory&lt;BR /&gt;
//&lt;BR /&gt;
&lt;BR /&gt;
public:&lt;BR /&gt;
HokusVector();&lt;BR /&gt;
~HokusVector();&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// operatory&lt;BR /&gt;
//&lt;BR /&gt;
public:&lt;BR /&gt;
Value&amp;amp; operator[](const unsigned int&amp;amp; i);&lt;BR /&gt;
const Value&amp;amp; operator[](const unsigned int&amp;amp; i) const;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// funkcje uzytkowe&lt;BR /&gt;
//&lt;BR /&gt;
public:&lt;BR /&gt;
void reserve( unsigned int size );&lt;BR /&gt;
unsigned int size() const;&lt;BR /&gt;
bool empty() const;&lt;BR /&gt;
void clear();&lt;BR /&gt;
void resize( unsigned int size );&lt;BR /&gt;
void push_back( const T&amp;amp; value );&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// dane klasy&lt;BR /&gt;
//&lt;BR /&gt;
private:&lt;BR /&gt;
std::vector&amp;lt; std::vector&lt;T&gt; &amp;gt; m_banks;&lt;BR /&gt;
unsigned int m_banksize;&lt;BR /&gt;
&lt;BR /&gt;
};&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* END: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* START: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt;&lt;BR /&gt;
HokusVector&lt;T&gt;::HokusVector()&lt;BR /&gt;
{ // set&lt;BR /&gt;
m_banksize = __max( 10, 20000000/sizeof(T) );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt;&lt;BR /&gt;
HokusVector&lt;T&gt;::~HokusVector()&lt;BR /&gt;
{ //&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; HokusVector&lt;T&gt;::Value&amp;amp;&lt;BR /&gt;
HokusVector&lt;T&gt;::operator[](const unsigned int&amp;amp; i)&lt;BR /&gt;
{ // success&lt;BR /&gt;
return m_banks[i/m_banksize][i-(i/m_banksize)*m_banksize];&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; const HokusVector&lt;T&gt;::Value&amp;amp;&lt;BR /&gt;
HokusVector&lt;T&gt;::operator[](const unsigned int&amp;amp; i) const&lt;BR /&gt;
{ // success&lt;BR /&gt;
return m_banks[i/m_banksize][i-(i/m_banksize)*m_banksize];&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::reserve( unsigned int size )&lt;BR /&gt;
{&lt;BR /&gt;
// test&lt;BR /&gt;
if( m_banks.size()*m_banksize &amp;gt;= size )&lt;BR /&gt;
{ // ERROR: nothing to reserve&lt;BR /&gt;
return;&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// resize vectors&lt;BR /&gt;
m_banks.resize( (size-1 )/m_banksize +1 );&lt;BR /&gt;
&lt;BR /&gt;
// reserve all vectors&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
m_banks&lt;I&gt;.reserve( m_banksize );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; unsigned int&lt;BR /&gt;
HokusVector&lt;T&gt;::size() const&lt;BR /&gt;
{&lt;BR /&gt;
&lt;BR /&gt;
// variables&lt;BR /&gt;
unsigned int&lt;BR /&gt;
i, size=0;&lt;BR /&gt;
&lt;BR /&gt;
// calc&lt;BR /&gt;
for( i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
size += m_banks&lt;I&gt;.size();&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// success&lt;BR /&gt;
return size;&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; bool&lt;BR /&gt;
HokusVector&lt;T&gt;::empty() const&lt;BR /&gt;
{&lt;BR /&gt;
// test&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{&lt;BR /&gt;
//&lt;BR /&gt;
if( !m_banks&lt;I&gt;.empty() )&lt;BR /&gt;
{ // ERROR: not empty&lt;BR /&gt;
return false;&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// success: empty&lt;BR /&gt;
return true;&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::clear()&lt;BR /&gt;
{&lt;BR /&gt;
// clear&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
m_banks&lt;I&gt;.clear();&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// clear&lt;BR /&gt;
m_banks.clear();&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::resize( unsigned int size )&lt;BR /&gt;
{&lt;BR /&gt;
// test&lt;BR /&gt;
if( 0 == size )&lt;BR /&gt;
{ // just clear&lt;BR /&gt;
return clear();&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// resize vectors&lt;BR /&gt;
m_banks.resize( (size-1)/m_banksize +1 );&lt;BR /&gt;
&lt;BR /&gt;
// resize all vectors&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
m_banks&lt;I&gt;.resize( m_banksize );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// resize last vector&lt;BR /&gt;
m_banks[m_banks.size()-1].reserve( m_banksize );&lt;BR /&gt;
m_banks[m_banks.size()-1].resize( size - (m_banks.size()-1)*m_banksize );&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::push_back( const HokusVector&lt;T&gt;::Value&amp;amp; value )&lt;BR /&gt;
{&lt;BR /&gt;
// get size&lt;BR /&gt;
unsigned int newsize = this-&amp;gt;size() +1;&lt;BR /&gt;
&lt;BR /&gt;
// calc nvectors&lt;BR /&gt;
unsigned int ivector = (newsize-1) / m_banksize;&lt;BR /&gt;
&lt;BR /&gt;
// add new vector&lt;BR /&gt;
if( m_banks.size() &amp;lt;= ivector )&lt;BR /&gt;
{&lt;BR /&gt;
//&lt;BR /&gt;
m_banks.push_back( std::vector&lt;T&gt;() );&lt;BR /&gt;
m_banks.back().reserve( m_banksize );&lt;BR /&gt;
assert( m_banks.size() == ivector+1 );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// assert&lt;BR /&gt;
assert( !m_banks.empty() );&lt;BR /&gt;
&lt;BR /&gt;
// add new item&lt;BR /&gt;
m_banks[ivector].push_back( value );&lt;BR /&gt;
assert( m_banks[ivector].size() &amp;lt;= m_banksize );&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* END: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
&lt;/T&gt;&lt;/T&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/CODE&gt;&lt;I&gt;&lt;I&gt;&lt;I&gt;&lt;I&gt;&lt;I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;</description>
      <pubDate>Sat, 17 Sep 2005 15:30:39 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435055#M25462</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2005-09-17T15:30:39Z</dc:date>
    </item>
    <item>
      <title>Re: [CRASH] new char[480MB]</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435056#M25463</link>
      <description>Why are you using one of std::vector&amp;lt;&amp;gt;, std::deque&amp;lt;&amp;gt; or std::list&amp;lt;&amp;gt;?&lt;BR /&gt;
&lt;BR /&gt;
   Dan&lt;BR /&gt;
&lt;BR /&gt;
"HokuS" &lt;JUST.DONT&gt; wrote in message &lt;BR /&gt;
news:4959532@discussion.autodesk.com...&lt;BR /&gt;
This is my working solution to work with big tables in case not enough&lt;BR /&gt;
contiguous memory.&lt;BR /&gt;
&lt;BR /&gt;
&lt;CODE&gt;&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* START: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
template&lt;CLASS t=""&gt;&lt;BR /&gt;
class HokusVector&lt;BR /&gt;
{&lt;BR /&gt;
&lt;BR /&gt;
// typedefs&lt;BR /&gt;
//&lt;BR /&gt;
&lt;BR /&gt;
public:&lt;BR /&gt;
typedef T Value;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// konstruktory / destruktory&lt;BR /&gt;
//&lt;BR /&gt;
&lt;BR /&gt;
public:&lt;BR /&gt;
HokusVector();&lt;BR /&gt;
~HokusVector();&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// operatory&lt;BR /&gt;
//&lt;BR /&gt;
public:&lt;BR /&gt;
Value&amp;amp; operator[](const unsigned int&amp;amp; i);&lt;BR /&gt;
const Value&amp;amp; operator[](const unsigned int&amp;amp; i) const;&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// funkcje uzytkowe&lt;BR /&gt;
//&lt;BR /&gt;
public:&lt;BR /&gt;
void reserve( unsigned int size );&lt;BR /&gt;
unsigned int size() const;&lt;BR /&gt;
bool empty() const;&lt;BR /&gt;
void clear();&lt;BR /&gt;
void resize( unsigned int size );&lt;BR /&gt;
void push_back( const T&amp;amp; value );&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
// dane klasy&lt;BR /&gt;
//&lt;BR /&gt;
private:&lt;BR /&gt;
std::vector&amp;lt; std::vector&lt;T&gt; &amp;gt; m_banks;&lt;BR /&gt;
unsigned int m_banksize;&lt;BR /&gt;
&lt;BR /&gt;
};&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* END: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* START: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt;&lt;BR /&gt;
HokusVector&lt;T&gt;::HokusVector()&lt;BR /&gt;
{ // set&lt;BR /&gt;
m_banksize = __max( 10, 20000000/sizeof(T) );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt;&lt;BR /&gt;
HokusVector&lt;T&gt;::~HokusVector()&lt;BR /&gt;
{ //&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; HokusVector&lt;T&gt;::Value&amp;amp;&lt;BR /&gt;
HokusVector&lt;T&gt;::operator[](const unsigned int&amp;amp; i)&lt;BR /&gt;
{ // success&lt;BR /&gt;
return m_banks[i/m_banksize][i-(i/m_banksize)*m_banksize];&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; const HokusVector&lt;T&gt;::Value&amp;amp;&lt;BR /&gt;
HokusVector&lt;T&gt;::operator[](const unsigned int&amp;amp; i) const&lt;BR /&gt;
{ // success&lt;BR /&gt;
return m_banks[i/m_banksize][i-(i/m_banksize)*m_banksize];&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::reserve( unsigned int size )&lt;BR /&gt;
{&lt;BR /&gt;
// test&lt;BR /&gt;
if( m_banks.size()*m_banksize &amp;gt;= size )&lt;BR /&gt;
{ // ERROR: nothing to reserve&lt;BR /&gt;
return;&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// resize vectors&lt;BR /&gt;
m_banks.resize( (size-1 )/m_banksize +1 );&lt;BR /&gt;
&lt;BR /&gt;
// reserve all vectors&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
m_banks&lt;I&gt;.reserve( m_banksize );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; unsigned int&lt;BR /&gt;
HokusVector&lt;T&gt;::size() const&lt;BR /&gt;
{&lt;BR /&gt;
&lt;BR /&gt;
// variables&lt;BR /&gt;
unsigned int&lt;BR /&gt;
i, size=0;&lt;BR /&gt;
&lt;BR /&gt;
// calc&lt;BR /&gt;
for( i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
size += m_banks&lt;I&gt;.size();&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// success&lt;BR /&gt;
return size;&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; bool&lt;BR /&gt;
HokusVector&lt;T&gt;::empty() const&lt;BR /&gt;
{&lt;BR /&gt;
// test&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{&lt;BR /&gt;
//&lt;BR /&gt;
if( !m_banks&lt;I&gt;.empty() )&lt;BR /&gt;
{ // ERROR: not empty&lt;BR /&gt;
return false;&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// success: empty&lt;BR /&gt;
return true;&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::clear()&lt;BR /&gt;
{&lt;BR /&gt;
// clear&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
m_banks&lt;I&gt;.clear();&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// clear&lt;BR /&gt;
m_banks.clear();&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::resize( unsigned int size )&lt;BR /&gt;
{&lt;BR /&gt;
// test&lt;BR /&gt;
if( 0 == size )&lt;BR /&gt;
{ // just clear&lt;BR /&gt;
return clear();&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// resize vectors&lt;BR /&gt;
m_banks.resize( (size-1)/m_banksize +1 );&lt;BR /&gt;
&lt;BR /&gt;
// resize all vectors&lt;BR /&gt;
for( unsigned int i=0 ; i&lt;M_BANKS.SIZE&gt;
{ //&lt;BR /&gt;
m_banks&lt;I&gt;.resize( m_banksize );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// resize last vector&lt;BR /&gt;
m_banks[m_banks.size()-1].reserve( m_banksize );&lt;BR /&gt;
m_banks[m_banks.size()-1].resize( size - (m_banks.size()-1)*m_banksize );&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
//\\//\\//\\//\\//\\//\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//\\//&lt;BR /&gt;
template&lt;CLASS t=""&gt; void&lt;BR /&gt;
HokusVector&lt;T&gt;::push_back( const HokusVector&lt;T&gt;::Value&amp;amp; value )&lt;BR /&gt;
{&lt;BR /&gt;
// get size&lt;BR /&gt;
unsigned int newsize = this-&amp;gt;size() +1;&lt;BR /&gt;
&lt;BR /&gt;
// calc nvectors&lt;BR /&gt;
unsigned int ivector = (newsize-1) / m_banksize;&lt;BR /&gt;
&lt;BR /&gt;
// add new vector&lt;BR /&gt;
if( m_banks.size() &amp;lt;= ivector )&lt;BR /&gt;
{&lt;BR /&gt;
//&lt;BR /&gt;
m_banks.push_back( std::vector&lt;T&gt;() );&lt;BR /&gt;
m_banks.back().reserve( m_banksize );&lt;BR /&gt;
assert( m_banks.size() == ivector+1 );&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
// assert&lt;BR /&gt;
assert( !m_banks.empty() );&lt;BR /&gt;
&lt;BR /&gt;
// add new item&lt;BR /&gt;
m_banks[ivector].push_back( value );&lt;BR /&gt;
assert( m_banks[ivector].size() &amp;lt;= m_banksize );&lt;BR /&gt;
&lt;BR /&gt;
}&lt;BR /&gt;
&lt;BR /&gt;
&lt;BR /&gt;
/*************************************************************************&lt;BR /&gt;
* END: class HokusVector&lt;BR /&gt;
*************************************************************************/&lt;BR /&gt;
&lt;BR /&gt;
&lt;/T&gt;&lt;/T&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/I&gt;&lt;/M_BANKS.SIZE&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/T&gt;&lt;/CLASS&gt;&lt;/CODE&gt;&lt;I&gt;&lt;I&gt;&lt;I&gt;&lt;I&gt;&lt;I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/I&gt;&lt;/JUST.DONT&gt;</description>
      <pubDate>Sat, 17 Sep 2005 19:35:37 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435056#M25463</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2005-09-17T19:35:37Z</dc:date>
    </item>
    <item>
      <title>Re: [CRASH] new char[480MB]</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435057#M25464</link>
      <description>When I attempt to call std::vector&lt;CHAR&gt;::reserve(480000000) or &lt;BR /&gt;
std::list&lt;CHAR&gt;::resize(480000000) CRASH occurs. Do you think 480MB is too &lt;BR /&gt;
much for ObjectARX applications? Of course no, when I use my vector class &lt;BR /&gt;
everything is fine and I am able to allocate more than 1GB of memory.&lt;BR /&gt;
&lt;BR /&gt;
Regards&lt;/CHAR&gt;&lt;/CHAR&gt;</description>
      <pubDate>Sat, 17 Sep 2005 19:50:48 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435057#M25464</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2005-09-17T19:50:48Z</dc:date>
    </item>
    <item>
      <title>Re: [CRASH] new char[480MB]</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435058#M25465</link>
      <description>When I try&lt;BR /&gt;
malloc(480 *  1024 * 1024);&lt;BR /&gt;
I get a "CAcadMemoryException"&lt;BR /&gt;
&lt;BR /&gt;
In a 'normal' environment I can allocate 2 G's&lt;BR /&gt;
(And aCad itself eats only about 50Mb's)&lt;BR /&gt;
&lt;BR /&gt;
So maybe you should allocate large chunk in a&lt;BR /&gt;
separate thread</description>
      <pubDate>Tue, 20 Sep 2005 15:57:43 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/crash-new-char-480mb/m-p/1435058#M25465</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2005-09-20T15:57:43Z</dc:date>
    </item>
  </channel>
</rss>

