[질문] static 변수 선언시.....

splendor의 이미지

#include ......
...............

int aaa = 0; --------> (1)

static int aaa = 0; --------> (2)

int sampleFunction() {

............
...........

}

=====================================================

위와 같은 코딩을 한다고 할때....

(1)처럼 했을때와 (2)처럼 했을때가 서로 차이가 있나요...??
저장 메모리 영역이나, 접근가능범위에 있어서 서로 차이가 있는지요?

기본적인 것인데, 갑자기 헷갈리는군요...ㅡㅡ;;

BarracuTa의 이미지

위 상황이 1번과 2번 다 전역에서 존재한다면
생성 되고 소멸되는 시간은 같습니다.

만약 어떠한 블럭 즉 함수 안에서 선언 되어진다면
소멸되는 시간에 차이가 있습니다.

그리고 생성되는 장소또한
1번에 경우는 자동 변수로서 스택 영역에 생성이 되고
2번경우에는 전역변수와 staic 변수가 존재하는 데이터영역에 생성이됩니다.

저희 업소를 방문해 주셔서 감사합니다.

저희 업소를 방문해 주셔서 감사합니다.

skkim7의 이미지

코드를 보면 함수 밖에 선언된 전역변수처럼 보입니다.
이 경우 똑같이 프로그램 실행하자 마자 메모리를 차지하게 되지만
static을 앞에 붙이게 되면 해당 .c파일에서만 접근이 가능합니다.
안 붙이면 다른 곳에서도 extern을 이용해서 선언하고 접근가능하고요.
그래서 static을 붙인 변수들은 같은 이름으로 여러 화일에 쓸 수 있어요.

kalstein의 이미지

그냥 extern 함수명. 해놓으면...링크중에 알아서 링크해주는걸로 알고있습니다만...;;

전 static...써봐야 함수내에 쓰거나 혹은 Singleton(아주간단히 쓸때) 말고는

스태틱을 잘 안쓰게되더라구요 ^^;; 질문하신내용도 저 2가지가 다른지 같은지...;;

쓰는건 똑같으니까요 ㅡ.ㅡㅋ


------------------------------------------
Let`s Smart Move!!
http://kalstein.tistory.com/

익명사용자의 이미지

VS 쓰는데, 닷넷에서 문자열 처리하는 개념이, 같은 내용의 상수 문자열 위치는 같다... 정도인 것 같아서..
그렇다면, 어차피 static으로 써두고, 심볼 이름 중복이나 오용 같은 문제만 아니면 전역으로 사용해도 상관없을 것 같아서
대강 그런 식으로 쓰고 있는데, 혹시 잘못된 건지요?

static 자체에 대한 얘기를 하자면, 싱글 스레드일 경우 선언 후 종료 시점까지 종종 쓰인다면 static이 낫지 않을까요? 클래스 멤버 함수 인자 넘겨줄 때 특정 변수값을 빈번하게 넘겨줘야 한다면, 따로 처리해서 static 변수에 넘기는 게 편하더군요..
(값의 변동은 물론 민감하게 체크해야겠지요)
하지만 물론 함부로 쓰진 못 하고, 스코프 범위가 전역이거나 그에 근접한 경우의 변수에만 한정해서 쓰고 있습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.