문제

내 컴퓨터 과학 II 수업에서 교수는 ++,-,*= 등을 2 작전으로 간주합니다. 그러나 어셈블리 수준에서 이것은 실제로 두 가지 작업이 아닙니다. 누군가가 단순성을 위해서만 설명 할 수 있습니까?

도움이 되었습니까?

해결책

실제로 읽기, 증분 (또는 무엇이든), 쓰기 : 3 가지 작업이라고 생각합니다. 그것은 일종의 공유 메모리에서 어떤 종류의 로컬 스토리지 (예 : 레지스터 또는 스택)로 읽고 로컬 스토리지에서 작동 한 다음 글을 쓰고 있다고 가정합니다.

어셈블리 수준에서 얼마나 많은 운영이 있는지, 당신이 증분하는 것, 플랫폼, 하드웨어 등에 따라 다릅니다.

다른 팁

++ (예 : B ++)가 단순화하기 때문입니다.

b = b + 1 

거기에는 두 가지 작업 (B + 1)이 있으며 원래 변수에 대한 추가 값의 할당이 있습니다.

복잡성 분석을 할 때 왜 귀찮게합니까? 그것은 단지 o (1) :-)입니다.

편집 : 투표 할 때 이유를 알려주십시오. 질문에 태그가 붙어 있으므로 복잡성, 나는 Big O 개념이 실제 상수보다는 가장 중요하다고 생각합니다. 게다가, 다른 답변에서 이미 언급 한 바와 같이, 이것은 얼마나 많은 운영이 이루어지는 요인에 따라 달라집니다 : 운영, 플랫폼, 컴파일러 등을 계산하는 방식.

나는 몇 가지 추측을 던질 것이다.

  • 교수가 해석 된 언어를 언급하고 있습니까?
  • ++ 나는 i ++와 다릅니다.
  • 아마도 그의 어셈블리 랑 선택 중간 스토리지 변수가 필요할 수 있습니까?

    add reg_temp, reg_i, 1
    mov reg_i, reg_temp
    

추가 플러스 세터가 아닌가?

i+= 1과 유사합니까?

교수는 아마도 값을 취하고 1에 1을 추가 한 다음 변수에 다시 할당해야한다고 언급하고있을 것입니다.

어셈블리 수준에서 모든 것이 레지스터로 수행되므로 변수가

ADD AX,1

그러나 컴파일 된 언어에서는 모든 것이 저장되어야합니다.

MOV AX,i
ADD AX, 1
MOV i, AX

기본 아키텍처를 완전히 잊지 않았다면 ...

당신은 나에게 좀 생각해 보았다 "배심원은 나가지 않습니다"오래 전에 들었던 문제.

"사전 진출은 사후 분쟁보다 빠릅니다"

방금 빠른 Google 검색을했습니다.

  1. 많은 사람들이 여전히 그것을 진실로 붙잡고 있습니다.
  2. 다른 사람들은 컴파일러가 너무 최적화되어 있으며 비교 고 레벨 코드 코드는 벤치마킹 할 수 없습니다.
  3. 아직 다른 사람 차이가 없다고 주장합니다.

상황에 따라 두 가지 의미가 있기 때문에 내 의견으로는 2 개 이상이어야하며, 나는 그것을 볼 때 항상 그들을 상기시켜야합니다.

a = b++ 와 같다 a = b; b = b + 1

그리고

a = ++b 와 같다 b = b + 1; a = b

이것은 대부분의 첫해 학생들을 절벽에서 파견하기에 충분한 혼란입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top