- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Tôi đang tìm hiểu về việc căn chỉnh bộ nhớ. Tôi nghĩ rằng tôi hiểu khái niệm này, tôi chỉ muốn đảm bảo bằng một ví dụ xem tôi có hiểu đúng cách thực hành hay không.
Tôi có hai lớp như sau
lớp cơ sở {
int64_t a;
int64_tb;
int64_tc;
int64_t d;
phương thức void ảo();
}
lớp A: Cơ sở công cộng {
// con trỏ ảo 8 byte
// 32 byte Đối tượng cơ sở
// 16 byte Cấu trúc C
dữ liệu C;
ghi đè phương thức void();
}
Lớp A bây giờ là 56 byte. Để căn chỉnh khi sử dụng bộ nhớ A trong một mảng, tôi nghĩ nó cần 8 byte đệm, vì 64 chia hết cho 32, là thành viên lớn nhất của lớp. Vấn đề đầu tiên của tôi là tôi không chắc mình có cần nó hay không, vì các thành viên của Base thực sự được căn chỉnh 8 byte. Ngay cả khi tôi thực sự cần nó, tôi nên đặt phần đệm 8 byte trước "dữ liệu" thành viên hay sau "dữ liệu". Tôi nghĩ trước "dữ liệu" vì C là 16 byte và đặt nó trước "dữ liệu" có nghĩa là "dữ liệu" bắt đầu ở byte 48, chia hết cho 16.
Cảm ơn trước.
EDIT: Tôi quên đưa cái này vào, nhưng A thực sự ghi đè một số phương thức ảo của Base. Đây là nguồn gốc của con trỏ bảng ảo
câu trả lời hay nhất
Chúng ta có thể căn chỉnh một lớp rất đơn giản:
// Lớp này được căn chỉnh giống như int
lớp UnalignedClass {
int x, y, z;
};
// Lớp này hiện được căn chỉnh theo ranh giới 16 byte
lớp căn chỉnh(16) AlignedClass {
int x, y, z;
};
Tương tự, nếu bạn muốn căn chỉnh một lớp dẫn xuất, bạn có thể làm như sau:
lớp cơ sở {
int64_t a;
int64_tb;
int64_tc;
int64_t d;
};
lớp C {
dữ liệu char[16];
};
lớp căn chỉnh (64) A: Cơ sở công cộng {
// Không có con trỏ ảo, vì Base không chứa phương thức ảo
// 32 byte Đối tượng cơ sở
// 16 byte Cấu trúc C
dữ liệu C;
};
Nếu chúng ta in ra kích thước và căn chỉnh chúng ta có thể thấy MỘT
Kích thước và căn chỉnh là 64 và trình biên dịch sẽ tự động thêm phần đệm bổ sung.
#include
int chính() {
std::cout << sizeof(A) << '\n';
std::cout <
}
Tức là bạnkhả thiKhông cần phải căn chỉnh thủ công các lớp học của bạn. Nếu không được chỉ định, căn chỉnh của lớp sẽ là căn chỉnh của thành viên có căn chỉnh lớn nhất. Ví dụ:
class Alignas(64) Foo {} // Foo được căn chỉnh thành 64 byte
class Bar { // Bar CŨNG được căn chỉnh thành 64 byte, vì nó chứa Foo
int x;
int y;
Foo f;
};
Làm cách nào để căn chỉnh bộ nhớ các lớp dẫn xuất? Giới thiệu về c++ - Làm cách nào để căn chỉnh bộ nhớ các lớp dẫn xuất? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/57466270/
Tôi có một vấn đề biên dịch kỳ lạ mà tôi không thể hiểu được. // Tôi biết, bạn không bao giờ nên lấy từ lớp mẫu Thư viện STL SharedClass:
Tôi là người mới bắt đầu học Haskell, vì vậy hãy thông cảm nếu tôi hỏi những câu hỏi ngu ngốc. Gần đây, tôi gặp các câu hỏi trong SO trình bày cách rút ra các kiểu cũng như cách triển khai các hàm và biểu thức (chẳng hạn như Làm cách nào tôi có thể hiểu "
Cách tự động lấy phiên bản Đọc của GADT này: {-# LANGUAGE GADTs, StandaloneDeriving #-} data TypeDec a Where TypeDecInt
Tôi gặp một tình huống là tôi muốn lớp Deal chú ý đến loại DealDetail của nó và ngược lại, tôi muốn DealDetail chú ý đến loại Deal. Trong tương lai tôi muốn có nhiều hậu duệ của Deal và DealDetails.
Tôi mới làm quen với C# vì vậy hãy đồng ý với tôi. Được rồi, vậy là tôi có hai lớp trong các tập hợp khác nhau cần tham chiếu lẫn nhau: namespace AssemblyA { class A { Private B MyB {
Nói tóm lại, tôi đã triển khai một lớp bắt nguồn từ SynchronizationContext để các ứng dụng GUI có thể dễ dàng sử dụng các sự kiện được tạo ra trên các luồng không phải luồng GUI. Tôi sẽ đánh giá rất cao ý kiến về việc thực hiện của tôi. Cụ thể,
Tôi đang thiết kế một hệ thống nhỏ và muốn biết các sắc thái về cách phân bổ bộ nhớ cho các lớp dẫn xuất. Nếu tôi có hai lớp class foo { public: int a; Foo(): a(0) {};
Tôi đang cố gắng viết một enum bắt nguồn từ PartialEq với một đối tượng đặc điểm thực hiện việc này một cách thủ công. Tôi đã sử dụng giải pháp ở đây để buộc những người triển khai Trait viết các phương thức bình đẳng. Điều này không được biên dịch: trait Trait {
Đoạn mã sau biên dịch (đặc biệt vì MyError được công nhận là có thuộc tính gỡ lỗi): use std::str; use std::fmt #[derive(Debug)] enum MyError trong đó F:
Có cách nào dễ dàng để chú thích các trường trong cấu trúc để chúng bị bỏ qua khi lấy đặc điểm PartialEq không? Ví dụ: #[derive(PartialEq,Eq)] pub struct UndirectedGraph {
Tôi đang viết mã để xử lý các đối tượng thuộc loại "Foo". foo là một thùng chứa cung cấp các lớp lồng nhau của loại Phần tử để cung cấp quyền truy cập hiệu quả và trừu tượng vào các phần tử của nó. Phần tử Vị trí của đối tượng được bọc trong vùng chứa. Bây giờ, "Foo" có thể
Giả sử như sau: lớp con : public parent { public: fun1(parent * obj); // ở đâu đó trên lớp con
Tôi có một số lớp mẫu lớp mẫu Transition { public: virtual Cost getCost() = 0 };
Tôi đang cố gắng sử dụng QSortFilterProxyModel tùy chỉnh Đây là tiêu đề của tôi: #include class QSortFilterProxyModel_NumbersLast : publi.
Tôi đang sử dụng C# và mvc3. Tôi đã thêm một dự án vào giải pháp. Tôi muốn tạo Bộ điều khiển mới và lấy nó từ Bộ điều khiển trong dự án mà tôi đã thêm. Tôi nên làm gì? Câu trả lời hay nhất là trong Visual St
Tôi có một đối tượng trong python có nguồn gốc từ QtGui.QGraphicsPixmapItem và có một số thuộc tính và phương thức cơ bản. Sau khi gọi deepcopy tham chiếu đến đối tượng này, tôi nhận được thông báo lỗi khi cố gắng sử dụng bản sao
Vì các trang chỉ có thể được thêm vào Tài liệu cố định nên tôi đã viết một lớp dẫn xuất: public class CustomFixedDocument : FixedDocument { public voi
Tôi đang gặp vấn đề lớn khi tùy chỉnh QMainWindow vì tôi không biết cách triển khai những điều sau: Từ tài liệu QMainWindow, QMainWindow có một số khu vực đặc biệt cho thanh công cụ, tiện ích được gắn đế, thanh trạng thái và các khu vực khác
Tôi muốn trải nghiệm QT và quyết định viết một trình soạn thảo hex nhỏ. Để làm được điều này, tôi cần một tiện ích cho phép cuộn. Sau một số nghiên cứu, tôi thấy rằng QTextEdit có nguồn gốc từ QAbstractScrollArea cho mục đích này. Đọc QAbstr
Tôi đang tìm kiếm một thuật toán có thể lấy được khóa từ quá trình xáo trộn đã xảy ra. Giả sử chúng ta có chuỗi "Xin chào" được xáo trộn: "hello" -> "loelh" Bây giờ tôi muốn lấy khóa k từ chuỗi đó để tôi có thể sử dụng để hoàn tác việc xáo trộn
Tôi là một lập trình viên xuất sắc, rất giỏi!