Boost logo

Boost Users :

Subject: Re: [Boost-users] multi_array with large dimensions crashes
From: Jothy (jothybasu_at_[hidden])
Date: 2011-08-25 05:04:49


Hi Pierre,

Sorry for the late reply.

The code work now, thanks very much. But the programme crashes with a
run-time error when the dimensions of the array are huge 500x500x500. This
is probably due to the limitation of the 32 bit addrress space. Is there any
other work around. I heard of creating arrays with strides and allocating
them in different blocks of memory rather than in contiguos memory?

Thanks again

Jothy

On Wed, Aug 24, 2011 at 6:25 PM, Pierre-Andre Noel <
noel.pierre.andre_at_[hidden]> wrote:

> Yes, 500, 300 and 400 were the example dimensions you used in your earlier
> message.
>
> Did you got it to work?
>
> Pierre-André
>
> PS: This email was not sent to the whole list.
>
>
>
> On Wed, Aug 24, 2011 at 11:55 AM, Jothy <jothybasu_at_[hidden]> wrote:
>
>> You mean 500,300,400 are the required dimesnions and xDim,yDim,zDim are
>> site_type parameters.
>>
>> So the code should be like below I guess for an array of [x][y][z]
>>
>>
>> array_ref_type::size_type xDim(x), yDim(y), zDim(z);
>>
>> array_storage_type Storage(xDim*yDim*zDim);
>> array_ref_type Array(&Storage.front(),boost::extents[xDim][yDim][zDim]);
>>
>> Thanks
>>
>> Jothy
>>
>>
>>
>>
>>
>>
>> On Wed, Aug 24, 2011 at 3:51 PM, Pierre-Andre Noel <
>> noel.pierre.andre_at_[hidden]> wrote:
>>
>>> >> I am not familiar with multi_array, but it seems that you are creating
>>> a >1GB object on the stack. This will almost always crash. Try creating it
>>> on the heap instead. Be prepared for std::bad_alloc.
>>>
>>> > But how to do this? I am new to c++.
>>>
>>> I suggest you to either 1. read on the operators "new" and "delete" or 2.
>>> use a std::vector to allocate the memory then use a boost::multi_array_ref
>>> to refer to it. Here's an example:
>>>
>>> #include <vector>
>>> #include <boost/multi_array.hpp>
>>>
>>> int main()
>>> {
>>> typedef float data_type;
>>> typedef std::vector<data_type> array_storage_type;
>>> typedef boost::multi_array_ref<data_type,3> array_ref_type;
>>>
>>> array_ref_type::size_type xDim(500), yDim(300), zDim(400);
>>> array_storage_type Storage(xDim*yDim*zDim);
>>> array_ref_type
>>> Array(&Storage.front(),boost::extents[xDim][yDim][zDim]);
>>> // You may now use Array as usual.
>>> }
>>>
>>> Hope it helps,
>>>
>>> Pierre-André Noël
>>>
>>>
>>> On Wed, Aug 24, 2011 at 5:20 AM, Jothy <jothybasu_at_[hidden]> wrote:
>>>
>>>> Thanks for pointing this out.
>>>>
>>>> But how to do this? I am new to c++.
>>>>
>>>> Jothy
>>>>
>>>>
>>>> On Tue, Aug 23, 2011 at 10:42 PM, Juraj Ivančić <
>>>> juraj.ivancic_at_[hidden]> wrote:
>>>>
>>>>> On 23.8.2011. 12:18, Jothy wrote:
>>>>>
>>>>>> Hi all,
>>>>>>
>>>>>> I have just started to use boost libs. I am trying to create a large
>>>>>> float array (mandatory for my purpose). it works fine till certain
>>>>>> limit, but crashes above that. I think it about allocating memory in
>>>>>> the
>>>>>> stack.
>>>>>>
>>>>>> My code is like this
>>>>>>
>>>>>> typedefboost::multi_array<**float,3>array_type;
>>>>>> typedefarray_type::indexindex;
>>>>>> array_typeArray(boost::**extents[xDim][yDim][zDim]);//**500,300,400
>>>>>> for instance
>>>>>>
>>>>>>
>>>>>> Can some one help me to resolve this?
>>>>>>
>>>>>
>>>>> I am not familiar with multi_array, but it seems that you are creating
>>>>> a >1GB object on the stack. This will almost always crash. Try creating it
>>>>> on the heap instead. Be prepared for std::bad_alloc.
>>>>>
>>>>> HTH
>>>>>
>>>>>
>>>>> ______________________________**_________________
>>>>> Boost-users mailing list
>>>>> Boost-users_at_[hidden]
>>>>> http://lists.boost.org/**mailman/listinfo.cgi/boost-**users>
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Boost-users mailing list
>>>> Boost-users_at_[hidden]
>>>>
http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>>>
>>>
>>>
>>> _______________________________________________
>>> Boost-users mailing list
>>> Boost-users_at_[hidden]
>>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>>
>>
>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
>
>



Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net