⊗jsSpOtMm 278 of 294 menu

JavaScript 메모리 사용 최적화

생성된 모든 변수는 컴퓨터의 운영 메모리에 저장됩니다. 가끔 생각 없이 코드를 작성하면 메모리 사용량이 급격히 증가할 수 있습니다.

예를 들어 살펴보겠습니다. 우리 앞에 1부터 100000000까지의 정수 합을 찾는 과제가 있다고 가정해 봅시다. 주어진 범위에서 배열을 정수로 채우는 함수가 있다고 가정합니다:

function fillArr(a, b) { let res = []; for (let i = a; i <= b; i++) { res.push(i); } return res; }

또한 배열 요소의 합을 구하는 함수가 있다고 가정합니다:

function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; }

이 함수들의 조합을 사용하여 주어진 과제를 쉽게 해결할 수 있습니다:

let sum = getSum(fillArr(1, 100000000));

우아한 해결책이 나왔습니다. 그러나 여기에는 문제가 있습니다: 이 코드는 엄청난 양의 운영 메모리를 소비합니다.

계산해 봅시다. 함수 fillArr100000000개의 숫자로 배열을 생성합니다. JavaScript가 숫자당 2바이트를 할당한다고 가정하면 - 우리 배열을 저장하는 데에는 200000000바이트, 즉 약 200메가바이트의 운영 메모리가 필요합니다.

그러나 실제로는 JavaScript에서 배열 저장 시 매우 큰 오버헤드가 발생하기 때문에 훨씬 더 많은 운영 메모리가 필요할 것입니다.

문제를 이해하면, 과제를 해결하면서도 거의 운영 메모리를 소비하지 않는 함수를 쉽게 만들 수 있습니다:

function getNumsSum(max) { let sum = 0; for (let i = 1; i <= max; i++) { sum += i; } return sum; }

우리 함수를 사용하여 과제를 해결해 봅시다:

let sum = getNumsSum(100000000);

어떤 프로그래머에게 주어진 범위 내에서 나머지 없이 7로 나누어 떨어지는 숫자의 개수를 찾는 과제가 있었습니다. 그는 다음과 같이 해결했습니다:

let arr = []; for (let i = 0; i <= 1000; i++) { if (i % 7 == 0) { arr.push(i); } } console.log(arr.length);

이 코드의 문제점을 설명하세요. 코드를 더 최적화된 형태로 수정하세요.

어떤 프로그래머에게 숫자의 약수의 합을 찾는 과제가 있었습니다. 그는 다음과 같이 해결했습니다:

function getDivisors(num) { let res = []; for (let i = 1; i <= num; i++) { if (num % i === 0) { res.push(i); } } return res; } function getSum(arr) { let sum = 0; for (let elem of arr) { sum += elem } return sum; } let sum = getSum(getDivisors(320)); console.log(sum);

이 코드의 문제점을 설명하세요. 코드를 더 최적화된 형태로 수정하세요.

한국어
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақКыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
우리는 웹사이트 운영, 분석 및 개인화를 위해 쿠키를 사용합니다. 데이터 처리는 개인정보 처리방침에 따라 이루어집니다.
모두 수락 설정 거부