스택이란 무엇인가요?
질문 1: 스택이란 무엇입니까? 힙과 스택은 서로 다른 개념입니다. 힙에 할당된 메모리는 시스템에서 해제되지 않고 동적으로 할당됩니다. 스택에 할당된 메모리는 시스템에 의해 자동으로 해제되어 정적으로 할당됩니다. 런타임 스택을 스택이라고 합니다. 스택은 높은 메모리 주소에서 낮은 주소로 할당되는 반면 힙은 반대 방향으로 할당됩니다. malloc 또는 new에 의해 할당된 메모리는 힙에서 할당된 메모리입니다. 힙에서 할당된 메모리는 프로그래머가 직접 해제해야 하며, 그렇지 않으면 이 메모리가 점유되어 해제될 수 없으며 오류가 발생합니다. "메모리 누수"라는 메시지가 나타납니다. 이로 인해 시스템에 할당할 수 있는 메모리가 점점 줄어들고 시스템 충돌이 발생합니다. 스택은 "후입선출" 알고리즘을 구현하는 데이터 구조입니다. 직경이 작은 대나무 관을 상상해 보세요. 한쪽 끝은 열려 있고 다른 쪽 끝은 닫혀 있습니다. 숫자가 적힌 작은 공이 여러 개 있습니다. 작은 공의 직경은 대나무 통의 직경보다 약간 작습니다. 이제 서로 다른 숫자의 작은 공을 대나무 통에 넣으면 규칙을 찾을 수 있습니다. 먼저 넣은 작은 공은 나중에 꺼낼 수 있고, 반대로 마지막에 넣은 작은 공은 먼저 꺼낼 수 있습니다. 그래서 '선입 후출'이 이 구조의 특징이다. 스택은 그러한 데이터 구조입니다. 메모리에 저장 영역을 열고 데이터가 이 영역에 하나씩 저장됩니다(즉, "눌림-푸시"). 스택에 푸시된 마지막 데이터가 있는 데이터 단위를 항상 가리키는 주소 포인터가 있습니다. 이 주소 포인터를 저장하는 레지스터를 스택 포인터라고 합니다. 데이터가 처음 배치되는 단위를 "스택의 바닥"이라고 합니다. 데이터가 하나씩 저장되는데, 이 프로세스를 "푸시"라고 합니다. 스택을 푸시하는 과정에서 데이터 조각이 스택에 푸시될 때마다 이전 장치에 연결된 다음 장치에 배치되고 스택 포인터의 주소는 자동으로 1씩 증가됩니다. 이러한 데이터를 읽을 때 스택 포인터의 주소에 따라 데이터를 읽고 스택 포인터의 주소 번호가 자동으로 1씩 감소됩니다. 이 과정을 "팝팝핑"이라고 합니다. 이는 후입선출 원칙을 구현합니다. 스택 레지스터는 스택을 저장하는 레지스터이다.
질문 2: 스택의 개념은 무엇인가요? 스택은 데이터를 저장하기 위해 메모리에 열려 있는 공간입니다
확장 방향은 메모리의 큰 주소에서 작은 주소로 입니다. 주소
함수 호출 시 전달된 매개변수를 저장하는 데 사용됩니다.
정적 변수는 프로그램의 정적 메모리 영역에 저장됩니다. 프로그램의 뒷부분, 프론트 엔드에 가장 가까운 곳입니다
질문 3: 스택이란 무엇이며 그 기능은 무엇입니까? 스택은 소설에서 흔히 사용하는 캐릭터 생성 방법으로, 주로 작은 캐릭터. 예를 들어, 어떤 검사는 무적이라고 불릴 정도로 대단한 사람이었습니다. 그러나 한 작은 남자가 아무런 수단 없이 정면 대결에서 그를 물리치고 그의 놀라운 힘을 보여주었다. 이것은 다른 사람들의 엄청난 힘을 통해 그를 이 사람의 명성으로 전환시키기 위한 이 작은 사람을 위한 스택입니다. 이것은 스택입니다
질문 4: 고대에 스택이란 무엇입니까? 물건을 보관하는 데 사용되는 건물입니다. "시서? Xiaoya"에는 "Naiqiu Qiansi Warehouse"라는 문장이 포함되어 창고 건설의 역사가 오랜 역사를 가지고 있음을 보여줍니다. 현대 창고는 단순한 보관보다 더 많은 비즈니스 이점을 고려합니다. 이것이 기존 창고와의 차이점이다. 따라서 현대 창고는 운송 회전율, 보관 방법 및 건물 시설 측면에서 합리적인 통로 배치, 물품 분포 및 최대 적재 높이를 중요하게 생각하며 비용 효율적인 기계화 및 자동화 된 접근 시설을 구성하여 저장 용량을 향상시킵니다. 그리고 업무 효율성.
창고는 물품을 보관하는 창고, 운송시설(크레인, 엘리베이터, 슬라이드 등), 창고 출입을 위한 운송관 및 장비, 소방시설, 관리실 등으로 구성된다. . 창고는 보관품목의 형태에 따라 고체품 보관창고, 액체품 보관창고, 가스품 보관창고, 분말품 보관창고로 구분되며, 원자재 보관창고, 반제품 보관창고로 구분됩니다. - 완제품 및 완제품; 건설에 따라 형태는 단층 창고, 다층 창고 및 원통형 창고로 나눌 수 있습니다.
단층 창고는 금속 자재, 건축 자재, 광석, 기계 제품, 차량, 석유, 화학 원료, 목재 및 그 제품 등을 보관하는 데 적합합니다. 수상운송 터미널 창고, 철도운송 창고, 항공운송 창고는 대부분 단층 건물을 사용하여 하역 속도를 높입니다. 단층 창고의 일반적인 배치 설계에서는 운송 차량과 지게차가 창고에 직접 출입할 수 있도록 도로를 연결해야 합니다. 이러한 종류의 창고는 일반적으로 조립식 철근 콘크리트 구조를 채택하며 기둥 네트워크는 일반적으로 6m이고 범위는 12m, 15m, 18m, 24m, 30m 및 36m입니다. 바닥 적재량이 많은 창고의 경우 스팬이 커야 합니다. 창고 내 크레인의 리프팅 용량은 보관 품목 중 단일 품목의 최대 중량을 기준으로 결정됩니다. 리프팅 용량이 5톤 미만인 경우 싱글 빔 크레인이나 모노레일 호이스트를 사용할 수 있으며, 리프팅 용량이 5톤을 초과하는 경우 교량 크레인을 사용할 수 있습니다. 창고는 습기 방지가 필요합니다. 가연성 물질을 보관하는 데 사용하는 경우 스파크를 방지하기 위해 유연한 바닥층을 사용해야 합니다. 지붕과 벽은 모두 불침투성과 방수성이 있어야 합니다.
다층창고는 일반적으로 백화점, 전자제품, 식품, 고무제품, 의약품, 의료기기, 화학제품, 문구, 기구 등을 보관합니다. 1층에는 하역 및 하역 구역이 있어야 하며, 차량을 싣고 내리는 데 직접 접근할 수 있어야 합니다. 화물의 수직운송에는 일반적으로 1.5~5톤 용량의 화물용 엘리베이터가 사용됩니다. 적재 및 하역 속도를 높이기 위해 엘리베이터실로 이동할 수 있는 화물 트롤리나 지게차를 갖추는 것을 고려해야 합니다. 슬라이드는 하역을 위해 다층 창고에서 일반적으로 사용됩니다. 슬라이드는 대부분 철근콘크리트 구조로 되어 있으며, 표면층은 테라조왁싱으로 되어 있으며, 금속골조나 철판 표면도 사용할 수 있으나, 철판이 녹슬지 않도록 하거나 스테인레스강판을 표면층으로 사용할 수도 있습니다. 다층 창고의 단위 하중이 500kg을 초과하는 경우 빔리스 바닥을 사용할 수 있습니다. 창고는 일반적으로 도색을 하지 않으며, 그라우트 줄눈은 흰색으로 도색할 수 있습니다. 백화점, 의약품, 식품, 의류 등을 보관하는 창고는 이음새에 벌레가 숨지 않도록 도색을 해야 합니다. 다층 창고의 "입체 창고"의 보관 및 픽업은 전자 컴퓨터를 사용하여 기계화됩니다. 이런 종류의 창고는 작은 면적을 차지하고 인력을 절약하지만 보관 물품의 범주에는 일정한 범위가 있습니다.
원통형 창고는 일반적으로 벌크 시멘트, 건조 슬래그, 비산회, 벌크 곡물, 석유, 가스 및 기타 가스를 저장합니다. 원통형 창고의 건축 설계는 보관 품목의 종류와 상하역 방법에 따라 결정됩니다. 창고의 상부, 벽, 바닥은 방수, 방습 처리되어야 하며, 창고 상부에는 진공장치를 설치하여야 한다. 일상적인 유지보수를 용이하게 하기 위해 걸이 구멍, 맨홀(창고 벽에 사다리가 있음), 계량통 구멍 및 리프팅 후크를 설치해야 합니다. 원통형 창고는 일반적으로 현장 타설 철근 콘크리트 구조물을 사용하며 슬라이딩 폼 공법을 사용하여 건축됩니다. 석유 저장고와 가스 저장고는 금속 구조물로 만들어집니다. 창고의 환기에 주의하십시오. 각 창고의 외벽에는 셔터를 설치해야 하며, 새를 방지하기 위해 셔터 외부에 금속 메쉬를 추가해야 합니다. 석유(가스), 화학원료 등을 보관하는 위험물 창고는 내열·방습이 가능하도록 하고, 지붕에 단열층을 추가하거나 방폭지붕으로 설계하고, 방화칸막이를 설치해야 한다. 일반적으로 지상에서는 아스팔트를 사용할 수 있습니다. 기름 수집 구덩이는 기름 저장고에 설치되어야 합니다. 식품 창고는 개미와 벌로부터 보호되어야 합니다.
질문 5: 스택이란 무엇을 의미합니까? 컴퓨터 분야에서 스택은 무시할 수 없는 개념이지만, 컴퓨터 전문가를 포함한 많은 사람들은 스택이 실제로 두 개의 데이터 구조라는 사실을 이해하지 못합니다.
핵심 사항:
힙: 모든 순서
스택: 선입, 최후
힙과 스택의 차이점
p>
1. 사전 지식 - 프로그램의 메모리 할당
C/C로 컴파일된 프로그램이 차지하는 메모리는 다음과 같은 부분으로 나누어진다
1. 스택 영역( 스택) - 컴파일러가 자동으로 할당 및 해제, 함수 매개변수 값, 지역 변수 값 등을 저장하는 등으로 구성됩니다. 데이터 구조의 스택처럼 작동합니다.
2. 힙 영역(heap) - 일반적으로 프로그래머가 할당하고 해제하지만, 프로그래머가 해제하지 않으면 프로그램 종료 시 OS에 의해 재활용될 수 있습니다. 참고로 힙과는 데이터구조가 다릅니다. 할당방식이 연결리스트와 비슷하네요 ㅎㅎ.
3. 글로벌 영역(정적 영역)(정적) - 전역 변수와 정적 변수는 함께 저장됩니다. 초기화되지 않은 전역 변수와 초기화되지 않은 정적 변수는 다른 영역에 있습니다. 인접한 지역.
- 프로그램 종료 후 시스템이 해제합니다.
4. 리터럴 상수 영역 - 상수 문자열이 여기에 배치됩니다.
5. 프로그램 코드 영역 - 함수 본문의 바이너리 코드를 저장합니다.
2. 예제 프로그램
선배님이 작성하신 내용입니다.
main.cpp
int a = 0; 초기화 영역
char *p1; 초기화되지 않은 전역 영역
main()
{
int b; p> char s[] = abc; stack
char *p2; stack
char *p3 = 123456\0은 상수 영역에 있고 p3은 스택에 있습니다. .
static int c =0; 전역(정적) 초기화 영역
p1 = (char *)malloc(10)
p2 = (char *) malloc(20);
10바이트와 20바이트의 할당 영역이 힙 영역에 있습니다.
strcpy(p1, 123456); 123456\0은 상수 영역에 배치되며, 컴파일러는 이를 p3이 가리키는 123456과 동일한 위치에 최적화할 수 있습니다.
}
2. 힙과 스택에 대한 이론적 지식
2.1 적용 방법
스택:
By 시스템이 자동으로 할당합니다. 예를 들어 함수에서 지역 변수 int b를 선언하면 시스템이 자동으로 스택에 b에 대한 공간을 만듭니다.
힙:
프로그래머가 직접 이를 적용하고 지정해야 합니다. size. c malloc 함수에서
예를 들어, p1 = (char *)malloc(10)
C에서 new 연산자를 사용하세요.
예를 들어, p2 = (char *)malloc (10);
그러나 p1과 p2 자체는 스택에 있습니다.
2.2
적용 후 시스템 반응
스택: 스택의 남은 공간이 적용된 공간보다 큰 한 시스템은 다음에 대한 메모리를 제공합니다. 그렇지 않으면 예외가 보고됩니다. 프롬프트 스택 오버플로.
힙: 우선 운영 체제에는 사용 가능한 메모리 주소를 기록하는 연결 목록이 있다는 점을 알아야 합니다. 시스템이 프로그램에서 요청을 받으면
는 힙을 순회합니다. 요청된 공간의 힙 노드는 사용 가능한 노드 목록에서 삭제되고 해당 노드의 공간은 프로그램에 할당됩니다. 또한 대부분의 시스템에서는 첫 번째 공간이 됩니다. 이 메모리 공간의 주소입니다. 코드의 삭제 문이 이 메모리 공간을 올바르게 해제할 수 있도록 이 할당 크기를 기록합니다. 또한, 발견된 힙 노드의 크기가 요청된 크기와 정확하게 일치하지 않을 수 있으므로 시스템은 자동으로 초과된 부분을 자유 연결 목록에 다시 넣습니다.
2.3 애플리케이션 크기 제한
스택: Windows에서 스택은 낮은 주소로 확장되는 데이터 구조이며 연속적인 메모리 영역입니다. 이 문장이 의미하는 바는 스택 상단의 주소와 스택의 최대 용량이 시스템에 의해 미리 결정된다는 것입니다. WINDOWS에서는 스택의 크기가 2M입니다. 상수는 컴파일 타임에 결정됨) 요청된 공간이 스택의 남은 공간을 초과하면 오버플로 메시지가 표시됩니다. 따라서 스택에서...gt;gt;
질문 6: 스택이란 무엇입니까? 스택은 "후입 선출" 알고리즘을 구현하는 데이터 구조입니다.
한쪽 끝은 열려 있고 다른 쪽 끝은 닫혀 있는 작은 지름의 대나무 관을 상상해 보세요. 숫자가 적힌 작은 공이 여러 개 있습니다. 작은 공의 직경은 대나무 통의 직경보다 약간 작습니다. 이제 서로 다른 숫자의 작은 공을 대나무 통에 넣으면 규칙을 찾을 수 있습니다. 먼저 넣은 작은 공은 나중에 꺼낼 수 있고, 반대로 마지막에 넣은 작은 공은 먼저 꺼낼 수 있습니다. 그래서 '선입 후출'이 이 구조의 특징이다.
스택은 그러한 데이터 구조입니다. 메모리에 저장 영역을 열고 데이터가 이 영역에 하나씩 저장됩니다(즉, "눌림-푸시"). 스택에 푸시된 마지막 데이터가 있는 데이터 단위를 항상 가리키는 주소 포인터가 있습니다. 이 주소 포인터를 저장하는 레지스터를 스택 포인터라고 합니다. 데이터가 처음 배치되는 단위를 "스택의 바닥"이라고 합니다. 데이터가 하나씩 저장되는데, 이 프로세스를 "푸시"라고 합니다. 스택을 푸시하는 과정에서 데이터 조각이 스택에 푸시될 때마다 이전 장치에 연결된 다음 장치에 배치되고 스택 표시기의 주소가 1씩 증가합니다. 이러한 데이터를 읽을 때 스택 포인터의 주소에 따라 데이터를 읽고 스택 포인터의 주소 번호가 자동으로 1씩 감소됩니다. 이 과정을 "팝팝핑"이라고 합니다. 이는 후입선출 원칙을 구현합니다.
스택은 컴퓨터에서 가장 일반적으로 사용되는 데이터 구조입니다. 예를 들어, 함수 호출은 컴퓨터에서 스택을 사용하여 구현됩니다.
스택은 나중에 소개할 배열이나 연결리스트에 저장할 수 있습니다.
다음은 스택 상단 포인터와 데이터 항목 배열을 포함하는 스택 구조 정의입니다. 스택의 최상위 포인터는 초기에 -1을 가리키다가 데이터가 저장될 때 스택의 최상위 포인터가 1씩 증가하고, 데이터를 꺼낸 후에는 스택의 최상위 포인터가 1씩 감소합니다.
#define MAX_SIZE 100
typedef int DATA_TYPE
구조체 스택
{
DATA_TYPE 데이터[MAX_SIZE; ];
int top;
};
질문 7: 스택이 무엇인지, 그리고 스택에 푸시하고 팝하는 과정을 간략하게 설명하세요. 스택은 실제로 두 개의 데이터 구조입니다. 스택은 데이터 항목이 순서대로 배열된 데이터 구조입니다. 데이터 항목은 한쪽 끝(스택의 상단이라고 함)
에서만 삽입 및 삭제할 수 있습니다. 핵심 사항: 순서에 관계없이 더미를 쌓으세요. 스택, 후입/선출.
스택의 데이터 구조에는 푸시와 팝이라는 두 가지 기본 작업이 있습니다.
스택 프레임에는 스택 하단과 스택 상단이라는 두 가지 플래그가 포함되어 있습니다. 스택의 상단은 푸시되거나 팝될 데이터의 주소를 식별하며(
), 스택의 하단은 스택 프레임에 있는 마지막 데이터의 메모리 주소를 나타냅니다.
Win32에서 레지스터 esp는 스택의 하단 포인터를 저장하고 스택은 하위 주소를 향해 증가합니다.
따라서 esp는 스택의 상단 요소를 가리킵니다. /p>
스택 비교(운영 체제):
함수 매개변수 값, 지역 변수 값 등을 저장하기 위해 컴파일러에 의해 자동으로 할당 및 해제됩니다.
연산 방식은 1차 캐시를 사용하는 데이터 구조의 스택과 유사하다.
호출 시에는 대개 저장 공간에 있다가 즉시 해제된다.
힙(운영 체제):
일반적으로 프로그래머가 할당하고 해제합니다.
프로그래머가 해제하지 않으면 프로그램 종료 시 OS에 의해 재활용될 수 있습니다. 할당 방법은 연결 목록과 유사합니다.
힙은 2단계 캐시에 저장되며, 수명 주기는 가상 머신의 가비지 수집 알고리즘에 의해 결정됩니다(고아 개체가 되면 재활용 가능).
따라서 이러한 개체를 호출하는 속도는 상대적으로 느립니다.
힙(데이터 구조)
: 힙은 다음과 같이 트리로 간주할 수 있습니다. 힙 정렬
스택(데이터 구조)
: 후입선출(last-in-first-out) 데이터 구조
언어마다 설명이 다릅니다.
질문 8: 스택이란 무엇입니까? 스택은 무엇을 합니까? 만족스러운 답변, 열정적인 친구 2011-06-22 스택은 실제로 데이터를 저장하는 방식인 두 가지 개념입니다. 스택: 후입/선출(Last-In/First-Out); . 유용성에 대해 이야기하자면, 코드를 작성할 때 데이터 액세스에 미리 정해진 순서가 있어야 하는 경우가 있는데, 이는 사용자가 규정한 것이며, 작성하는 프로그램의 특성에 따라 힙, 스택 또는 큐를 사용할 수 있습니다. 클래스: 프로그래밍할 때 스택 포인터 SP를 다시 할당해야 하는 이유는 무엇입니까? 답변: 이것은 초기화가 아닌가요? 스택은 특별한 저장 영역이며, 주요 기능은 일반적으로 중단점과 장면을 보호하는 데 사용됩니다. 그 특징은 선입, 후출의 원칙에 따라 데이터에 액세스하는 것입니다. 여기서 인과 아웃은 푸시 및 팝 작업을 나타냅니다. 80C51 온칩 RAM의 일부 장치는 스택으로 사용할 수 있습니다. 8비트 스택 포인터 레지스터 SP가 있는데, 이는 온칩 RAM의 어느 단위가 현재 스택의 최상위인지를 나타내는 데 사용됩니다. 80C51 마이크로 컨트롤러 시스템이 재설정된 후 SP의 초기 값은 07H입니다. 이는 정보가 내부 RAM의 08H 유닛에서 스택된다는 것을 의미합니다. 하지만 80C51 시리즈의 스택 영역은 고정되어 있지 않습니다. 소프트웨어를 통해 SP 레지스터의 값을 변경하면 스택 영역을 변경할 수 있습니다. 워킹 레지스터 영역과 비트 어드레싱 영역을 피하기 위해 SP의 초기 값은 2FH 이상의 주소 값으로 설정될 수 있습니다. CPU가 작업 중에 두 세트의 작업 레지스터를 사용하는 경우 비트 변수를 사용하지 않으면 SP의 초기 값은 최소 0FH 이상이어야 하며, 비트 변수를 사용하는 경우 SP의 초기 값은 최소 2FH여야 합니다. 또는 그 이상. KeilC51 컴파일러는 프로그래머가 신경 쓸 필요 없이 자동으로 SP의 초기 설정 값을 계산합니다.
질문 9: 스택은 무엇을 의미하나요? 컴퓨터 과학에서 스택은 목록 끝에서만 삽입 또는 삭제 작업으로 제한되는 선형 목록입니다. 스택은 한쪽 끝에서만 삽입하고 삭제할 수 있는 특수 선형 목록인 데이터 구조입니다. 후입선출(Last In First Out) 원칙에 따라 데이터를 저장합니다. 먼저 들어온 데이터는 스택의 맨 아래로 푸시되고 마지막 데이터는 스택의 맨 위에 놓입니다. 스택의 맨 위에서 팝됩니다(마지막 데이터가 먼저 읽혀집니다). 스택은 동일한 끝에서 삽입 및 삭제 작업을 허용하는 특수 선형 목록입니다. 삽입 및 삭제 작업이 가능한 쪽을 스택의 맨 위, 다른 쪽 끝을 맨 아래라고 합니다. 스택의 맨 아래는 고정되어 있으며 스택의 요소 수가 0일 때 스택의 맨 위는 부동합니다. , 이를 빈 스택이라고 합니다. 삽입을 일반적으로 PUSH라고 하고, 삭제를 팝핑(POP)이라고 합니다. 스택은 LIFO--Last IN First Out 테이블이라고도 합니다. 스택은 함수가 호출될 때 중단점을 저장하는 데 사용할 수 있습니다.
위에서 언급한 것처럼 매우 명확합니다. p>
복사되었지만
질문 10: 스택의 특징은 무엇입니까? 스택은 "후입 선출" 알고리즘을 구현하는 데이터 구조입니다.
스택은 이런 데이터 구조입니다. 메모리에 저장 영역을 열고, 이 영역에 데이터가 하나씩 저장됩니다(즉, 항상 끝을 가리키는 주소 포인터가 있습니다. 스택에 푸시된 데이터가 위치하는 데이터 단위와 주소 포인터를 저장하는 레지스터를 스택 포인터라고 합니다. 데이터가 시작되는 단위를 "스택 하단"이라고 합니다. ". 스택을 푸시하는 과정에서 데이터 조각이 스택에 푸시될 때마다 이전 장치에 연결된 다음 장치에 배치됩니다. 이러한 데이터를 읽을 때 스택 포인터의 주소는 자동으로 다음과 같이 증가합니다. 1. 주소에서 데이터를 읽고 스택 포인터의 주소 번호가 자동으로 1 감소합니다.
이 과정을 "팝팝핑"이라고 합니다. 이는 후입선출 원칙을 구현합니다.