웹 프론트엔드 JS 튜토리얼 자바스크립트의 이해_01_메모리 할당 원리 분석의 이해_자바스크립트 기술

자바스크립트의 이해_01_메모리 할당 원리 분석의 이해_자바스크립트 기술

May 16, 2016 pm 06:18 PM
메모리 할당

기본 값과 참조 값
ECMAScript에서 변수는 기본 값과 참조 값이라는 두 가지 유형의 값을 저장할 수 있습니다.
프리미티브 값이란 원시 데이터 유형(기본 데이터 유형)을 나타내는 값, 즉 Undefine, Null, Number, String, Boolean 유형으로 표현되는 값을 의미합니다.
참조값은 복합 데이터 유형의 값, 즉 Object, Function, Array, Custom Object 등의 값을 말합니다.

스택 및 힙
참조 값은 스택과 힙이라는 두 가지 메모리 구조에 해당합니다.
스택은 후입선출 방식의 데이터 구조입니다. JavaScript에서는 스택의 동작을 시뮬레이션할 수 있습니다. 배열을 통해
코드 복사 코드는 다음과 같습니다.

var arr = [] / /스택 생성
arr.push("apple");/ /"apple" 요소 푸시 ["apple"]
arr.push("orange") //"orange" 요소 푸시 [ "apple","orange"]
arr.pop(); //"orange" ["apple"] 팝업
arr.push("banana");//"banana" 요소를 푸시합니다. ["apple","banana"]

us 해당 메모리 맵을 살펴보겠습니다.
자바스크립트의 이해_01_메모리 할당 원리 분석의 이해_자바스크립트 기술
원래 값은 즉, 해당 값은 변수 액세스 위치에 직접 저장됩니다.
힙은 데이터를 저장하는 해시 알고리즘 기반의 데이터 구조입니다. 자바스크립트에서는 참조 값이 힙에 저장됩니다.
참조 값은 힙에 저장된 객체, 즉 변수에 저장된 값(즉, 스택에 저장된 객체를 가리키는 변수)은 힙에 저장된 실제 객체를 가리키는 포인터입니다.
예: var obj = new Object(); obj는 스택에 저장되고 힙에 저장된 new Object() 객체를 가리킵니다.
그렇다면 왜 참조 값은 힙에 있고 원래 값은 스택에 있지 않습니까? 그렇다면 왜 그 질문에 대한 답을 탐구해 볼까요?
우선 코드를 살펴보겠습니다.
코드 복사 코드는 다음과 같습니다.

기능 사람(id,name,age){
this.id = id;
this.name = 이름
this.age = age; num = 10;
var bol = true;
var str = "abc";
var obj = new Object()
var arr = ['a','b','c '];
var person = new Person(100,"jxl",22);


그럼 메모리 분석 다이어그램을 살펴보겠습니다.


num, bol, str 변수는 기본 데이터 유형이며 해당 값은 스택에 직접 저장됩니다. obj, person 및 arr은 복합 데이터 유형이며 스택에 저장된 실제 개체를 가리킵니다. 힙. 자바스크립트의 이해_01_메모리 할당 원리 분석의 이해_자바스크립트 기술
위 그림에서 알 수 있듯이 힙에 있는 데이터를 직접 조작할 수는 없습니다. 즉, 객체를 직접 조작할 수는 없지만 스택에 있는 객체에 대한 참조를 통해 객체를 조작할 수 있다는 의미입니다. , 리모콘을 통해 조작하는 것과 같습니다. TV와 동일하지만 차이점은 TV 자체에는 제어 버튼이 없다는 점입니다.


이제 참조 값이 힙에 배치되고 원래 값이 스택에 배치되는 이유에 대한 질문에 대답해 보겠습니다.

한 문장을 기억하세요. 에너지는 보존됩니다. 공간을 교환하는 시간, 공간을 교환하는 시간의 문제일 뿐입니다.

힙은 스택보다 크고, 스택은 힙보다 빠르게 작동하며 객체는 복잡한 구조이며 자유롭게 확장할 수 있습니다. 예를 들어 배열은 무한히 확장될 수 있으며, 객체는 자유롭게 속성을 추가할 수 있습니다. 스택의 효율성에 영향을 주지 않도록 힙에 배치됩니다. 대신 참조를 통해 힙에 있는 실제 객체를 찾아 연산을 수행합니다. 단순 데이터 유형에 비해 단순 데이터 유형은 상대적으로 안정적이며 적은 양의 메모리만 차지합니다. 단순 데이터 유형이 힙에 배치되지 않는 이유는 참조를 통해 힙에서 실제 객체를 찾는 데 시간이 걸리고, 이 종합적인 비용이 스택에서 직접 실제 값을 얻는 데 드는 비용보다 훨씬 크기 때문입니다. 따라서 단순 데이터 유형의 값은 스택에 직접 저장됩니다.

요약:

프로그램은 매우 간단하지만 모든 것의 기초가 됩니다. 초고층 빌딩도 벽돌 하나하나 쌓아가기 때문입니다.
기억은 프로그램 실행의 기초입니다. 기억을 이해한다는 것은 모든 것을 이해한다는 것을 의미합니다.
이것은 당신의 노력입니다. 스스로를 격려하고 어서!

참고:
JavaScript 고급 프로그래밍
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Java 함수의 메모리 할당에 대한 모범 사례는 무엇입니까? Java 함수의 메모리 할당에 대한 모범 사례는 무엇입니까? May 02, 2024 pm 10:33 PM

Java 함수의 메모리 할당에 대한 모범 사례에는 자동 메모리 관리 사용 및 적절한 GC 알고리즘 사용 확인이 포함됩니다. 메모리 할당 패턴을 모니터링하고 메모리 누수 또는 병목 현상을 식별합니다. 비슷한 크기의 객체를 재사용하려면 객체 풀링을 사용하세요. 단기 할당을 많이 피하고 대안 사용을 고려하세요. 불필요한 객체 생성을 방지하려면 Null 객체 패턴을 사용하세요. JavaGC에 액세스할 수 없는 메모리가 해제되도록 네이티브 리소스를 명시적으로 해제합니다.

golang 함수의 메모리 할당 분석 golang 함수의 메모리 할당 분석 Apr 29, 2024 pm 02:24 PM

질문: Go 함수의 메모리 할당을 분석하는 방법은 무엇입니까? 답변: 힙 덤프를 생성하려면 pprof 패키지의 heapprofile 함수를 사용하십시오. 힙 덤프를 분석하여 할당 유형과 크기를 결정합니다. 자세한 설명: 힙 덤프 생성: 힙 프로파일러를 활성화하고 heapprofile 함수를 호출합니다. 힙 덤프 분석: gotoolpprof 명령을 사용하여 힙 덤프 파일을 분석하여 할당 정보를 확인합니다.

Golang 슬라이스의 메모리 할당 및 확장 전략에 대한 심층적 논의 Golang 슬라이스의 메모리 할당 및 확장 전략에 대한 심층적 논의 Jan 24, 2024 am 10:46 AM

Golang 슬라이싱 원리에 대한 심층 분석: 메모리 할당 및 확장 전략 소개: 슬라이싱은 Golang에서 일반적으로 사용되는 데이터 유형 중 하나이며 연속적인 데이터 시퀀스를 운영하는 편리한 방법을 제공합니다. 슬라이스를 사용할 때 프로그램 성능을 향상하려면 내부 메모리 할당 및 확장 전략을 이해하는 것이 중요합니다. 이 기사에서는 구체적인 코드 예제와 함께 Golang 슬라이싱의 원리에 대한 심층 분석을 제공합니다. 1. 메모리 구조와 슬라이싱의 기본 원리 Golang에서 슬라이싱은 기본 배열에 대한 참조 유형입니다.

C++ 함수 메모리 할당의 일반적인 오류와 해결 방법 C++ 함수 메모리 할당의 일반적인 오류와 해결 방법 Apr 22, 2024 pm 05:09 PM

함수 메모리 할당의 일반적인 오류에는 1) 원시 포인터 매달기, 2) 메모리 누수, 4) 잘못된 포인터 해제 등이 있습니다. 해결 방법: 1) 스마트 포인터를 사용합니다. 2) RAII를 사용합니다. 3) 메모리 풀을 사용합니다.

C++ 함수의 메모리 할당 및 삭제에 대한 함정과 모범 사례 C++ 함수의 메모리 할당 및 삭제에 대한 함정과 모범 사례 Apr 23, 2024 am 09:36 AM

C++에는 메모리 누수(더 이상 필요하지 않은 메모리에 대한 포인터 보유) 및 매달려 있는 포인터(해제된 메모리를 가리키는)를 포함하여 함수가 메모리를 할당하고 파괴할 때 주의해야 할 함정이 있습니다. 이러한 문제를 방지하기 위한 모범 사례에는 스마트 포인터(예: std::shared_ptr)를 사용하여 메모리를 자동으로 관리하는 것, 개체가 범위를 벗어날 때 리소스가 해제되도록 하는 것, 소멸자를 조심스럽게 처리하는 것입니다. 메모리 할당을 해제합니다. 이러한 방법을 따르면 코드의 안정성을 보장하고 메모리 누수 및 댕글링 포인터를 방지할 수 있습니다.

Java의 힙과 스택 간의 차이점과 해당 애플리케이션 시나리오를 분석합니다. Java의 힙과 스택 간의 차이점과 해당 애플리케이션 시나리오를 분석합니다. Feb 24, 2024 pm 11:12 PM

Java 힙과 스택의 차이점과 애플리케이션 시나리오 분석에는 특정 코드 예제가 필요합니다. Java 프로그램에서 힙과 스택은 일반적으로 사용되는 두 가지 데이터 구조이며 메모리에서 서로 다른 역할과 기능을 수행합니다. 효율적인 Java 프로그램을 작성하려면 힙과 스택의 차이점을 이해하는 것이 중요합니다. 먼저 Java 힙을 살펴보겠습니다. 힙은 객체를 저장하는 데 사용되는 영역입니다. 프로그램에서 생성된 모든 객체는 힙에 저장됩니다. 힙은 프로그램이 실행되는 동안 메모리가 동적으로 할당되고 해제되는 곳입니다. 힙은 어떠한 제한도 받지 않으며 자동으로 할당됩니다.

Go 언어로 효율적인 메모리 할당 및 가비지 수집 구현 Go 언어로 효율적인 메모리 할당 및 가비지 수집 구현 Sep 28, 2023 am 11:10 AM

Go 언어에서 효율적인 메모리 할당 및 가비지 수집 달성 현대 프로그래밍 언어에서는 메모리를 효과적으로 관리하는 것이 매우 중요합니다. 효율성을 위해 탄생한 언어인 Go 언어는 간단하고 사용하기 쉬운 메모리 관리 및 가비지 수집 메커니즘을 제공하여 개발자가 메모리를 수동으로 처리할 필요 없이 효율적인 메모리 할당 및 해제를 달성할 수 있도록 돕습니다. Go 언어의 메모리 할당은 런타임 시스템의 책임입니다. 동적으로 할당된 객체, 배열, 슬라이스 등을 저장하기 위해 힙이라는 메모리 영역을 제공합니다. n을 사용할 때

다양한 운영 체제에서의 C++ 함수 메모리 할당 및 소멸의 특성 다양한 운영 체제에서의 C++ 함수 메모리 할당 및 소멸의 특성 Apr 22, 2024 am 11:33 AM

C++ 함수의 특징 다양한 시스템에서의 메모리 할당 및 소멸 메모리 할당: Windows: msvcrt.dll 라이브러리의 힙 할당자 사용 Linux: glibc의 힙 할당자 사용 macOS: 시스템 라이브러리의 할당자 사용 메모리 파괴: Windows: 힙 할당자 사용 Linux: glibc의 힙 할당자를 사용하여 새로 할당된 메모리를 해제합니다. macOS: 시스템 라이브러리의 할당자를 사용하여 새로 할당된 메모리를 해제합니다.

See all articles