Prealllocation of undefined file size
조회 수: 10 (최근 30일)
이전 댓글 표시
Hi, I have question. Does preallocation must be perform on a defined size? Now I have a situation that I m receiving bits from serial port. I do not know large is the file size but i will keep receiving it with this codes:
received_count=1;
file=[];
received=fgetl(s);
file=[file received];
received_count=received_count+1;
And will stored inside the file variable until I fully received the bits in a large array let say (1,M) but M is unknown values. So how do i preallocate this file to minimize the execution time?
댓글 수: 0
채택된 답변
Walter Roberson
2011년 4월 27일
I already answered this for you.
As that comment is now hidden in the Older Comments list, I will repeat it here:
You can preallocate to your maximum expected size, or you can dynamically allocate in chunks (e.g., 16 Kb) so as to reduce the number of allocations you need to do. To allocate in chunks, you would determine whether the new data you have would fit within the existing buffer, and if not then extend the buffer by a number of elements and then write the new data in to it. for example, file(end+16384)=0 .
댓글 수: 5
Walter Roberson
2011년 4월 27일
By the way, with the dynamic allocation scheme, you should expect that there will still be a warning that the array may be growing within the loop. That's because it _is_ growing within the loop. It is not an error to grow an array within a loop: it just causes efficiency problems. The above code reduces the inefficiency.
There are dynamic allocation schemes that are more efficient than the above, that use cell arrays to assemble the data, but the code for those is more complex.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Performance and Memory에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!