Note that findall/3 is limited by the Goal predicate.
Here it creates a new list holding the values it found:
?- findall(X,between(0,5,X),L). L = [0, 1, 2, 3, 4, 5].
findall/3 is not limited by the length of the Bag! Here we give it a Bag of 10 fresh variables to fill with a Goal predicate that redoes forever:
?- length(L,10),bagof(X,between(0,inf,X),L). ERROR: Stack limit (1.0Gb) exceeded
If the third argument is not a fresh variable but a list (of fresh variables or otherwise), length always must match:
?- length(L,5),bagof(X,between(0,4,X),L). L = [0, 1, 2, 3, 4].