2013-07-24 13 views
5

나는 약간 혼란스러워. ArrayBuffer가 새로운 메모리 영역을 할당합니까? 그렇다면 안전한 최대 Blob 크기는 무엇입니까?ArrayBuffers의 최대 길이는 얼마입니까?

+0

처음에 왜 이것을 묻는 지 잘 모르겠습니다. 문제가 있니? BLOB 크기 제한에 대해서는 아무 것도 찾을 수 없으므로 클라이언트 컴퓨터의 메모리와 서버의 업로드 제한에 달려 있다고 생각합니다. –

+0

예, 기본 테스트에서 Firefox에서 512MB (테스팅 제한)와 같은 큰 버퍼를 할당하려고 시도했지만 방금 충돌했습니다. – cavila

+0

또한 감사관을 열 때 크롬 관리자 및 크롬 충돌 시계 변수에 유사한 항목을 할당하려고 시도했습니다. 브라우저가 OUT_OF_MEMORY 같은 오류를 발생시킬 것으로 예상합니다. 클라이언트에서 대용량 파일을 처리하기 위해 파일 판독기를 사용하는 데 관심이 있습니다. 현재는 큰 파일 (거대한 이미지)을 작은 버퍼로 쪼개서 충돌을 피할 수 있습니다. – cavila

답변

4

시스템에 따라 달라지며 제한이없는 것 같습니다. the specification에 따르면

:

요구 된 바이트 수는 예외 을 할당 할 수없는 경우가 발생합니다.

+0

링크가 가리키는 문서가 인용하는 단어를 포함하지 않습니다. [ "해당 데이터 블록을 만들 수 없다면 RangeError 예외가 발생합니다."] (https://www.ecma-international.org/ecma-262/6.0/#sec-createbytedatablock)? – Daerdemandt

+0

@Daerdemandt 내 링크가 사양의 "최신"버전을 가리키고 있기 때문에 진화 한 것 같습니다. 그렇습니다. 인용문은 내 답변에 새롭게 개정 된 것과 같습니다. –

1

나는 또한 동일한 질문을하고 있었다. 버퍼는 사용 가능한 시스템 메모리와 대용량 메모리를 처리하는 기본 JavaScript 엔진의 GC 기능으로 제한됩니다. 브라우저의 콘솔에 큰 버퍼를 만들고 다른 쪽에서는 브라우저의 프로세스 및 전체 메모리 사용량을 모니터링하여 플랫폼에 맞게 쉽게 테스트 할 수 있습니다.

크롬 370에서 512MB보다 큰 버퍼를 만들었습니다.하지만 시스템 메모리가 4GB이므로 더 많은 할당 후에 충돌이 발생할 수 있습니다. 100MB까지 할당 할 수 있기 때문에 깨지는 점을 발견하는 데 관심이 없지만 분명히 쉽게 테스트 할 수 있습니다.

1

제한 플랫폼이 부과 단지 어떤 하드 제한이있을 것 같지 않습니다 거기에 넣어 안전한 최대 물방울의 크기 일 것입니다 무슨.

그러나 인덱싱 된 액세스를 사용하는 경우 색인은 Number.MAX_SAFE_INTEGER보다 커야합니다. 그렇지 않으면 흥미로운 버그가 발생할 수 있습니다.

운좋게도 2^53-1 바이트는 약 8 페타 바이트이므로 정말 이상한 일을하지 않는 한 걱정할 일이 아닙니다.

관련 문제