Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Tham số đầu vào là mảng có chiếm bộ nhớ?

  1. #1
    Ngày gia nhập
    10 2008
    Bài viết
    54

    Mặc định Tham số đầu vào là mảng có chiếm bộ nhớ?

    Mình hỏi 1 câu ngu ngơ tí.
    Giờ mình có 1 class
    C++ Code:
    1. class A
    2. {
    3.      //...........
    4. }
    Và một class
    C++ Code:
    1. class B
    2. {
    3.      A  *aObject;
    4.      int index;
    5.      void Draw1(A aObject);
    6.      void Draw2(A *aObject);
    7.  
    8. }
    Trong Draw2, mặc dù tham số đầu vào là một mảng (A *aObject) nhưng ta vẫn sử dụng duy nhất 1 đối tượng (aObject[index]) (dựa vào index).
    Vậy, khi sử dụng Draw1 và Draw2 có khác gì nhau ko, sử dụng Draw2 có làm tốn bộ nhớ, tốc độ chương trình?
    Hơi lủng củng, mong mọi người giải thích.

  2. #2
    Ngày gia nhập
    07 2011
    Bài viết
    160

    Trong C/C++ khái niệm mảng và con trỏ khá giống nhau. Mảng cũng coi như là con trỏ và con trỏ cũng có thể coi là mảng. Draw2 chỉ phải truyền vào 1 con trỏ (thường là 4 bytes) nên tốn chi phí rất, rất ít.
    Ngược lại, Draw1 phải copy đối tượng A để truyền vào và sẽ thường tốn kém hơn.

  3. #3
    Ngày gia nhập
    01 2011
    Nơi ở
    \WINDOWS\Assembly\
    Bài viết
    54

    Trích dẫn Nguyên bản được gửi bởi bachhaiduong Xem bài viết
    Mình hỏi 1 câu ngu ngơ tí.
    Giờ mình có 1 class
    C++ Code:
    1. class A
    2. {
    3.      //...........
    4. }
    Và một class
    C++ Code:
    1. class B
    2. {
    3.      A  *aObject;
    4.      int index;
    5.      void Draw1(A aObject);
    6.      void Draw2(A *aObject);
    7.  
    8. }
    Trong Draw2, mặc dù tham số đầu vào là một mảng (A *aObject) nhưng ta vẫn sử dụng duy nhất 1 đối tượng (aObject[index]) (dựa vào index).
    Vậy, khi sử dụng Draw1 và Draw2 có khác gì nhau ko, sử dụng Draw2 có làm tốn bộ nhớ, tốc độ chương trình?
    Hơi lủng củng, mong mọi người giải thích.
    A *aObject không phải là 1 mảng mà là 1 con trỏ, khi truyền tham số
    C++ Code:
    1. B::Draw2 (&aObject [index])
    thì con trỏ aObject sẽ được trỏ vào aObject [index] (tức aObject = &aObject [i]) nên bộ nhớ sử dụng chỉ chiếm là sizeof (A*) == 4 bytes.

    Nếu sử dụng
    C++ Code:
    1. B::Draw1 (aObject [index])
    thì khi hàm hoạt động, mọi dữ liệu trong aObject sẽ được chép sang aObject [index] (shadow copy) nên kích thước sử dụng bộ nhớ lúc này phụ thuộc vào kích thước của kiểu A (cụ thể là sizeof (A))

    -> Thật ra theo nhận định của mình có lẽ bạn chưa hiểu rõ về con trỏ & mảng nên xem bài viết này:
    http://diendan.congdongcviet.com/showthread.php?t=42977

  4. #4
    Ngày gia nhập
    10 2008
    Bài viết
    54

    Ở đây A *aObject mình sử dụng là một mảng.
    Tức là, trước khi sử dụng hàm Draw2, mình đã khởi tạo mảng aObject = new A[100] chẳng hạn. Vs load tất cả dữ liệu lên mảng aObject. nên như vậy thì Draw2 tốn bộ nhớ hơn chứ, phải không?

Các đề tài tương tự

  1. Kiểu string trong c# là tham chiếu hay tham trị ???
    Gửi bởi thvnhn trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 04-11-2013, 08:38 PM
  2. Bài tập C Bài tập tính lãi ngân hàng dùng đệ quy hoặc tham chiếu, tham trị
    Gửi bởi thaohoangf trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 08-10-2012, 08:24 AM
  3. Phân biệt truyền biến bằng tham trị, tham chiếu, địa chỉ. Xin cảm ơn.
    Gửi bởi thaoha trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 18-02-2012, 02:03 PM
  4. tại sao tham số phải là tham chiếu? (toán tử gán =)
    Gửi bởi tatyasurai trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 12
    Bài viết cuối: 12-06-2011, 01:02 PM
  5. tham trị và tham chiếu trong C#
    Gửi bởi hunter1189 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 16
    Bài viết cuối: 03-04-2011, 11:03 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn