GNU 배열의 첨자/색인에 상한선이 있다는 것을 알았습니다.기원전. 대화형으로 실행하고 let arr[100000000]=42
에게 오류 반환을 요청합니다.
Runtime error (func=(main), adr=17): Array arr subscript out of bounds.
이 배열 크기 제한은 bc에 나열되지 않습니다.한계, 그리고 32767이라는 "변수 이름" 제한은 이에 영향을 미치지 않는 것 같습니다. bc는 arr[100000]=42
불만 없이 이를 허용하기 때문입니다. bc 에 대한 배열 첨자/인덱스의 정확한 범위는 무엇입니까? 이 경계를 변경할 수 있는 방법이 있나요?
답변1
다음과 같은 제한 사항을 볼 수 있습니다 bc
.
$ echo 'limits' | bc
BC_BASE_MAX = 2147483647
BC_DIM_MAX = 16777215
BC_SCALE_MAX = 2147483647
BC_STRING_MAX = 2147483647
MAX Exponent = 9223372036854775807
Number of vars = 32767
우리는 봤다 man bc (1p)
:
배열은 1차원이며 최대 {BC_DIM_MAX}개의 요소를 포함할 수 있습니다. 인덱싱은 0부터 시작해야 하므로 배열의 인덱스 범위는 0에서 {BC_DIM_MAX}−1입니다.
조사1.07.1파일에 정의되어 있습니다 const.h
.
/* Definitions for arrays. */
#define BC_DIM_MAX 16777215 /* this should be NODE_SIZE^NODE_DEPTH-1 */
#define NODE_SIZE 64 /* Must be a power of 2. */
#define NODE_MASK 0x3f /* Must be NODE_SIZE-1. */
#define NODE_SHIFT 6 /* Number of 1 bits in NODE_MASK. */
#define NODE_DEPTH 4
답변2
시행착오를 거쳐 상한은 2²⁴ = 16,777,216입니다. 아직 확실하지 않음왜이것이 상한값입니까, 아니면 어떻게 변경합니까?